From 4c1ca85f47b582e235e5a90cd36f286815b2d63a Mon Sep 17 00:00:00 2001 From: jdh8d <jdh8d@git.zephyr-software.com> Date: Thu, 1 Mar 2018 18:09:54 +0000 Subject: [PATCH] Removed bea engine from lots of inclue places and link steps, changed verbose mode for zipr to false, added very-verbose mode for zipr. fixed a few zipr bugs related to non-existant fallthroughs, etc. Former-commit-id: f75b940d2004b7ff7c833d6e4184a6a0aa8f9fd7 --- SConscript | 4 +-- libIRDB/include/core/fileir.hpp | 3 +- libIRDB/include/core/instruction.hpp | 6 ++++ libIRDB/include/core/operand_cs.hpp | 1 + libIRDB/src/cfg/SConscript | 2 -- libIRDB/src/core/SConscript | 2 ++ libIRDB/src/core/fileir.cpp | 7 ++++ libIRDB/src/core/operand_cs.cpp | 9 +++++ libIRDB/src/syscall/SConscript | 2 -- libIRDB/src/util/SConscript | 2 -- libIRDB/test/SConscript | 2 +- libIRDB/test/calc_conflicts.cpp | 1 - libIRDB/test/check_thunks.cpp | 1 - libIRDB/test/eh_frame.hpp | 1 - libIRDB/test/fill_in_cfg.cpp | 5 +-- libIRDB/test/fill_in_indtargs.cpp | 8 ++++- libIRDB/test/fill_in_indtargs.hpp | 1 - libIRDB/test/fix_calls.cpp | 17 +++++----- libIRDB/test/read_ehframe.cpp | 1 - libIRDB/test/split_eh_frame.cpp | 1 - libIRDB/test/unfix_calls.cpp | 1 - libtransform/src/SConscript | 1 - tools/SConscript | 7 ++-- tools/absolutify/SConscript | 1 - tools/c2e/SConscript | 1 - tools/cgc_buffrecv/SConscript | 1 - tools/cgc_hlx/SConscript | 1 - tools/cgc_rigrandom/SConscript | 1 - tools/cgclibc/SConscript | 1 - tools/cinderella/SConscript | 1 - tools/cookbook/SConscript | 1 - tools/cover/SConscript | 1 - tools/dump_map/SConscript | 1 - tools/fix_canaries/SConscript | 1 - tools/fix_rets/SConscript | 1 - tools/fix_rets/fix_rets.cpp | 10 +++--- tools/hook_dynamic_call/SConscript | 1 - tools/hook_start/SConscript | 1 - tools/inferfn/SConscript | 1 - tools/meds2pdb/SConscript | 1 - tools/memcover/SConscript | 1 - tools/prince/SConscript | 1 - tools/print_cfi_stats/SConscript | 1 - tools/ret_shadow_stack/SConscript | 1 - tools/ret_shadow_stack/rss_instrument.cpp | 20 +++++------ tools/safefn/SConscript | 1 - tools/safefr/SConscript | 1 - tools/selective_cfi/SConscript | 1 - tools/simple_cdi/SConscript | 1 - tools/simple_cdi/scdi_instr.cpp | 24 +++++++------ tools/spasm/SConscript | 1 - tools/transforms/SConscript | 2 -- xform/SConscript | 3 +- xform/rewriter.cpp | 41 +++++++++++------------ 54 files changed, 105 insertions(+), 105 deletions(-) diff --git a/SConscript b/SConscript index 0ce5786a2..344397e47 100644 --- a/SConscript +++ b/SConscript @@ -73,12 +73,12 @@ else: os.chdir(os.environ['SECURITY_TRANSFORMS_HOME']) -env['BASE_IRDB_LIBS']="IRDB-core", "pqxx", "pq", "BeaEngine_s_d", "capstone", "EXEIO" +env['BASE_IRDB_LIBS']="IRDB-core", "pqxx", "pq", "EXEIO" if sysname != "SunOS": libPEBLISS=SConscript("pebliss/trunk/pe_lib/SConscript", variant_dir='scons_build/libPEBLISS') # setup libraries needed for linking - env['BASE_IRDB_LIBS']="IRDB-core", "pqxx", "pq", "BeaEngine_s_d", "EXEIO", "pebliss" + env['BASE_IRDB_LIBS']="IRDB-core", "pqxx", "pq", "EXEIO", "pebliss" # pebliss requires iconv, which needs to be explicit on cygwin. if "CYGWIN" in sysname: diff --git a/libIRDB/include/core/fileir.hpp b/libIRDB/include/core/fileir.hpp index 88c8884d9..4a21a64f3 100644 --- a/libIRDB/include/core/fileir.hpp +++ b/libIRDB/include/core/fileir.hpp @@ -91,7 +91,8 @@ class FileIR_t : public BaseObj_t //removes the mapping for orig->assembly from the map. void ChangeRegistryKey(Instruction_t* orig, Instruction_t* updated); - static int GetArchitectureBitWidth(); + static int GetArchitectureBitWidth() ; + static int SetArchitectureBitWidth(const int width); void SetArchitecture(); // Lookup a scoop by address diff --git a/libIRDB/include/core/instruction.hpp b/libIRDB/include/core/instruction.hpp index 52d67b746..f5ab68608 100644 --- a/libIRDB/include/core/instruction.hpp +++ b/libIRDB/include/core/instruction.hpp @@ -41,6 +41,12 @@ class Instruction_t : public BaseObj_t Instruction_t* GetFallthrough() const { return fallthrough; } Instruction_t* GetTarget() const { return target; } ICFS_t* GetIBTargets() const { return icfs; } + + // prefer the copy method, since it's inline, compiler will optimize appropriately + // const& rets are just an optimization anyhow.... + //const std::string& GetDataBits() const { return data; } + //const std::string& GetComment() const { return comment; } + //const std::string& GetCallback() const { return callback; } std::string GetDataBits() const { return data; } std::string GetCallback() const { return callback; } std::string GetComment() const { return comment; } diff --git a/libIRDB/include/core/operand_cs.hpp b/libIRDB/include/core/operand_cs.hpp index f2ac0acd1..4ab07aa7d 100644 --- a/libIRDB/include/core/operand_cs.hpp +++ b/libIRDB/include/core/operand_cs.hpp @@ -18,6 +18,7 @@ class DecodedOperandCapstone_t virtual ~DecodedOperandCapstone_t(); bool isConstant() const; + uint64_t getConstant() const; string getString() const; bool isWrite() const; bool isRegister() const; diff --git a/libIRDB/src/cfg/SConscript b/libIRDB/src/cfg/SConscript index 0cde74ca7..3c8e4f514 100644 --- a/libIRDB/src/cfg/SConscript +++ b/libIRDB/src/cfg/SConscript @@ -13,8 +13,6 @@ files= ''' cpppath=''' $SECURITY_TRANSFORMS_HOME/include/ $SECURITY_TRANSFORMS_HOME/libIRDB/include/ - $SECURITY_TRANSFORMS_HOME/beaengine/include - $SECURITY_TRANSFORMS_HOME/beaengine/beaengineSources/Includes/ ''' #myenv.Append(CCFLAGS=" -Wall -W -Wextra -Wconversion ") diff --git a/libIRDB/src/core/SConscript b/libIRDB/src/core/SConscript index e034ad49c..4c9236e0a 100644 --- a/libIRDB/src/core/SConscript +++ b/libIRDB/src/core/SConscript @@ -31,6 +31,8 @@ files= ''' operand_meta.cpp ''' +# bea engine listed for core components. + cpppath=''' . $SECURITY_TRANSFORMS_HOME/include/ diff --git a/libIRDB/src/core/fileir.cpp b/libIRDB/src/core/fileir.cpp index cfa5ae99d..8abeb4b55 100644 --- a/libIRDB/src/core/fileir.cpp +++ b/libIRDB/src/core/fileir.cpp @@ -976,6 +976,13 @@ int FileIR_t::GetArchitectureBitWidth() return archdesc->GetBitWidth(); } +int FileIR_t::SetArchitectureBitWidth(int width) +{ + if(archdesc==NULL) + archdesc=new ArchitectureDescription_t; + archdesc->SetBitWidth(width); +} + void FileIR_t::SetArchitecture() { diff --git a/libIRDB/src/core/operand_cs.cpp b/libIRDB/src/core/operand_cs.cpp index 520c75de8..a12157a5a 100644 --- a/libIRDB/src/core/operand_cs.cpp +++ b/libIRDB/src/core/operand_cs.cpp @@ -168,6 +168,15 @@ bool DecodedOperandCapstone_t::isConstant() const return op.type==X86_OP_IMM; } +uint64_t DecodedOperandCapstone_t::getConstant() const +{ + if(!isConstant()) throw std::logic_error(string("Cannot ")+__FUNCTION__+" of non-constant operand"); + + const auto the_insn=static_cast<cs_insn*>(my_insn.get()); + const auto &op = (the_insn->detail->x86.operands[op_num]); + return op.imm; +} + string DecodedOperandCapstone_t::getString() const { const auto the_insn=static_cast<cs_insn*>(my_insn.get()); diff --git a/libIRDB/src/syscall/SConscript b/libIRDB/src/syscall/SConscript index 870242cf2..358dafeb9 100644 --- a/libIRDB/src/syscall/SConscript +++ b/libIRDB/src/syscall/SConscript @@ -12,8 +12,6 @@ files= ''' cpppath=''' $SECURITY_TRANSFORMS_HOME/include/ $SECURITY_TRANSFORMS_HOME/libIRDB/include/ - $SECURITY_TRANSFORMS_HOME/beaengine/include - $SECURITY_TRANSFORMS_HOME/beaengine/beaengineSources/Includes/ ''' #myenv.Append(CCFLAGS=" -Wall -W -Wextra -Wconversion ") diff --git a/libIRDB/src/util/SConscript b/libIRDB/src/util/SConscript index 41ea8016d..df81d3f68 100644 --- a/libIRDB/src/util/SConscript +++ b/libIRDB/src/util/SConscript @@ -13,8 +13,6 @@ files= ''' cpppath=''' $SECURITY_TRANSFORMS_HOME/include/ $SECURITY_TRANSFORMS_HOME/libIRDB/include/ - $SECURITY_TRANSFORMS_HOME/beaengine/include - $SECURITY_TRANSFORMS_HOME/beaengine/beaengineSources/Includes/ ''' #myenv.Append(CCFLAGS=" -Wall -W -Wextra -Wconversion ") diff --git a/libIRDB/test/SConscript b/libIRDB/test/SConscript index 9a3b11f8f..a7657d5c5 100644 --- a/libIRDB/test/SConscript +++ b/libIRDB/test/SConscript @@ -15,8 +15,8 @@ if 'build_tools' not in myenv or myenv['build_tools'] is None or int(myenv['buil $SECURITY_TRANSFORMS_HOME/libIRDB/include $SECURITY_TRANSFORMS_HOME/libMEDSannotation/include $SECURITY_TRANSFORMS_HOME/libEXEIO/include - $SECURITY_TRANSFORMS_HOME/beaengine/include ''' +# $SECURITY_TRANSFORMS_HOME/beaengine/include LIBPATH="$SECURITY_TRANSFORMS_HOME/lib" LIBS=Split( 'IRDB-cfg IRDB-util ' + env.subst('$BASE_IRDB_LIBS')+ " MEDSannotation") diff --git a/libIRDB/test/calc_conflicts.cpp b/libIRDB/test/calc_conflicts.cpp index 49de2f8d4..39077e80f 100644 --- a/libIRDB/test/calc_conflicts.cpp +++ b/libIRDB/test/calc_conflicts.cpp @@ -35,7 +35,6 @@ -#include "beaengine/BeaEngine.h" int odd_target_count=0; int bad_target_count=0; diff --git a/libIRDB/test/check_thunks.cpp b/libIRDB/test/check_thunks.cpp index 0b3e8cae9..189f129b9 100644 --- a/libIRDB/test/check_thunks.cpp +++ b/libIRDB/test/check_thunks.cpp @@ -28,7 +28,6 @@ #include <utils.hpp> #include <iostream> #include <stdlib.h> -#include "beaengine/BeaEngine.h" #include <assert.h> #include <string.h> #include <elf.h> diff --git a/libIRDB/test/eh_frame.hpp b/libIRDB/test/eh_frame.hpp index 789958276..87c0a9965 100644 --- a/libIRDB/test/eh_frame.hpp +++ b/libIRDB/test/eh_frame.hpp @@ -15,7 +15,6 @@ #include <memory> #include <exeio.h> -#include "beaengine/BeaEngine.h" #include "dwarf2.h" diff --git a/libIRDB/test/fill_in_cfg.cpp b/libIRDB/test/fill_in_cfg.cpp index 808fdadc1..5bc248849 100644 --- a/libIRDB/test/fill_in_cfg.cpp +++ b/libIRDB/test/fill_in_cfg.cpp @@ -279,7 +279,7 @@ void add_new_instructions(FileIR_t *firp) disasm.Options = NasmSyntax + PrefixedNumeral; disasm.Archi = firp->GetArchitectureBitWidth(); - disasm.EIP = (UIntPtr) &data[offset_into_section]; + disasm.EIP = (uintptr_t) &data[offset_into_section]; disasm.SecurityBlock=elfiop->sections[secndx]->get_size()-offset_into_section; disasm.VirtualAddr = missed_address; */ @@ -287,7 +287,6 @@ void add_new_instructions(FileIR_t *firp) - const auto instr_len = disasm.length(); /* bea docs say OUT_OF_RANGE and UNKNOWN_OPCODE are defined, but they aren't */ @@ -304,6 +303,8 @@ void add_new_instructions(FileIR_t *firp) else if(getenv("VERBOSE_CFG")) cout<<"Found valid insn at "<<missed_address<<": "<<disasm.getDisassembly()<<endl; + const auto instr_len = disasm.length(); + /* intel instructions have a max size of 16 */ assert(1<=instr_len && instr_len<=16); diff --git a/libIRDB/test/fill_in_indtargs.cpp b/libIRDB/test/fill_in_indtargs.cpp index cba0a91ef..48bfaeb0c 100644 --- a/libIRDB/test/fill_in_indtargs.cpp +++ b/libIRDB/test/fill_in_indtargs.cpp @@ -372,7 +372,13 @@ void get_instruction_targets(FileIR_t *firp, EXEIO::exeio* elfiop, const set<vir prov=ibt_provenance_t::ibtp_texttoprintf; } /* otherwise, any immediate is a possible branch target */ - possible_target(disasm.getImmediate() /* Instruction.Immediat*/ ,0, prov); + for(const auto& op: disasm.getOperands()) + { + if(op.isConstant()) + { + possible_target(op.getConstant() /* Instruction.Immediat*/ ,0, prov); + } + } for(auto i=0;i<4;i++) { diff --git a/libIRDB/test/fill_in_indtargs.hpp b/libIRDB/test/fill_in_indtargs.hpp index d8fcd0c99..9b7edc68e 100644 --- a/libIRDB/test/fill_in_indtargs.hpp +++ b/libIRDB/test/fill_in_indtargs.hpp @@ -34,7 +34,6 @@ #include <stdio.h> #include <exeio.h> -#include "beaengine/BeaEngine.h" #include "check_thunks.hpp" using namespace libIRDB; diff --git a/libIRDB/test/fix_calls.cpp b/libIRDB/test/fix_calls.cpp index f11daa22e..51ed3f794 100644 --- a/libIRDB/test/fix_calls.cpp +++ b/libIRDB/test/fix_calls.cpp @@ -24,7 +24,6 @@ #include <utils.hpp> #include <iostream> #include <stdlib.h> -#include "beaengine/BeaEngine.h" #include <assert.h> #include <string.h> #include <elf.h> @@ -85,7 +84,7 @@ pqxxDB_t pqxx_interface; bool opt_fix_icalls = false; bool opt_fix_safefn = true; -void fix_other_pcrel(FileIR_t* firp, Instruction_t *insn, UIntPtr offset); +void fix_other_pcrel(FileIR_t* firp, Instruction_t *insn, uintptr_t offset); /* Read the exception handler frame so that those indirect branches are accounted for */ void read_ehframe(FileIR_t* firp, EXEIO::exeio* ); @@ -881,6 +880,7 @@ void fix_all_calls(FileIR_t* firp, bool print_stats, bool fix_all) } } +#if 0 bool arg_has_relative(const ARGTYPE &arg) { /* if it's relative memory, watch out! */ @@ -890,12 +890,13 @@ bool arg_has_relative(const ARGTYPE &arg) return false; } +#endif // // fix_other_pcrel - add relocations to other instructions that have pcrel bits // -void fix_other_pcrel(FileIR_t* firp, Instruction_t *insn, UIntPtr virt_offset) +void fix_other_pcrel(FileIR_t* firp, Instruction_t *insn, uintptr_t virt_offset) { //DISASM disasm; //Disassemble(insn,disasm); @@ -937,16 +938,16 @@ void fix_other_pcrel(FileIR_t* firp, Instruction_t *insn, UIntPtr virt_offset) memcpy(cstr,data.c_str(), data.length()); void *offsetptr=&cstr[offset]; - UIntPtr disp=the_arg.getMemoryDisplacement(); // ->Memory.Displacement; - UIntPtr oldpc=virt_offset; - UIntPtr newdisp=disp+oldpc; + uintptr_t disp=the_arg.getMemoryDisplacement(); // ->Memory.Displacement; + uintptr_t oldpc=virt_offset; + uintptr_t newdisp=disp+oldpc; assert(offset+size<=data.length()); switch(size) { case 4: - assert( (UIntPtr)(int)newdisp == (UIntPtr)newdisp); + assert( (uintptr_t)(int)newdisp == (uintptr_t)newdisp); *(int*)offsetptr=newdisp; break; case 1: @@ -976,7 +977,7 @@ void fix_other_pcrel(FileIR_t* firp, Instruction_t *insn, UIntPtr virt_offset) } } -void fix_safefr(FileIR_t* firp, Instruction_t *insn, UIntPtr virt_offset) +void fix_safefr(FileIR_t* firp, Instruction_t *insn, uintptr_t virt_offset) { /* if this has already been fixed, we can skip it */ if(virt_offset==0 || virt_offset==-1) diff --git a/libIRDB/test/read_ehframe.cpp b/libIRDB/test/read_ehframe.cpp index b385b93c3..ebe7b9491 100644 --- a/libIRDB/test/read_ehframe.cpp +++ b/libIRDB/test/read_ehframe.cpp @@ -28,7 +28,6 @@ int ptrsize=0; #include <utils.hpp> #include <iostream> #include <stdlib.h> -#include "beaengine/BeaEngine.h" #include <assert.h> #include <string.h> diff --git a/libIRDB/test/split_eh_frame.cpp b/libIRDB/test/split_eh_frame.cpp index f5b2c0536..b10819b62 100644 --- a/libIRDB/test/split_eh_frame.cpp +++ b/libIRDB/test/split_eh_frame.cpp @@ -12,7 +12,6 @@ #include <memory> #include <exeio.h> -#include "beaengine/BeaEngine.h" #include "dwarf2.h" #include "eh_frame.hpp" diff --git a/libIRDB/test/unfix_calls.cpp b/libIRDB/test/unfix_calls.cpp index 4a76c8bd9..65ed56dfa 100644 --- a/libIRDB/test/unfix_calls.cpp +++ b/libIRDB/test/unfix_calls.cpp @@ -24,7 +24,6 @@ #include <libIRDB-cfg.hpp> #include <iostream> #include <stdlib.h> -#include "beaengine/BeaEngine.h" #include <assert.h> #include <string.h> diff --git a/libtransform/src/SConscript b/libtransform/src/SConscript index 1debb3fb0..81e16c573 100644 --- a/libtransform/src/SConscript +++ b/libtransform/src/SConscript @@ -12,7 +12,6 @@ files="Rewrite_Utility.cpp transform.cpp" cpppath=''' $SECURITY_TRANSFORMS_HOME/include $SECURITY_TRANSFORMS_HOME/libIRDB/include - $SECURITY_TRANSFORMS_HOME/beaengine/include $SECURITY_TRANSFORMS_HOME/libtransform/include $SECURITY_TRANSFORMS_HOME/libMEDSannotation/include/ ''' diff --git a/tools/SConscript b/tools/SConscript index 17a3c69cc..9233a064b 100644 --- a/tools/SConscript +++ b/tools/SConscript @@ -9,7 +9,6 @@ dirs=''' cover fix_rets meds2pdb - memcover ret_shadow_stack safefr selective_cfi @@ -17,9 +16,13 @@ dirs=''' spasm cookbook dump_map - print_cfi_stats hook_start ''' + +nobuild_dirs=''' + print_cfi_stats + memcover + ''' cgc_dirs=''' c2e cgc_hlx diff --git a/tools/absolutify/SConscript b/tools/absolutify/SConscript index d5b8b4f33..e20543abe 100644 --- a/tools/absolutify/SConscript +++ b/tools/absolutify/SConscript @@ -9,7 +9,6 @@ cpppath=''' $SECURITY_TRANSFORMS_HOME/include $SECURITY_TRANSFORMS_HOME/libIRDB/include $SECURITY_TRANSFORMS_HOME/libEXEIO/include - $SECURITY_TRANSFORMS_HOME/beaengine/include $SECURITY_TRANSFORMS_HOME/tools/transforms $SECURITY_TRANSFORMS_HOME/xform $SECURITY_TRANSFORMS_HOME/libMEDSannotation/include diff --git a/tools/c2e/SConscript b/tools/c2e/SConscript index 630d3365d..9112ce874 100644 --- a/tools/c2e/SConscript +++ b/tools/c2e/SConscript @@ -9,7 +9,6 @@ myenv.Replace(SECURITY_TRANSFORMS_HOME=os.environ['SECURITY_TRANSFORMS_HOME']) cpppath=''' $SECURITY_TRANSFORMS_HOME/include $SECURITY_TRANSFORMS_HOME/libIRDB/include - $SECURITY_TRANSFORMS_HOME/beaengine/include $SECURITY_TRANSFORMS_HOME/tools/transforms ''' diff --git a/tools/cgc_buffrecv/SConscript b/tools/cgc_buffrecv/SConscript index 9523749a7..ef5b4a068 100644 --- a/tools/cgc_buffrecv/SConscript +++ b/tools/cgc_buffrecv/SConscript @@ -10,7 +10,6 @@ cpppath=''' $SECURITY_TRANSFORMS_HOME/include $SECURITY_TRANSFORMS_HOME/libIRDB/include $SECURITY_TRANSFORMS_HOME/libMEDSannotation/include - $SECURITY_TRANSFORMS_HOME/beaengine/include $SECURITY_TRANSFORMS_HOME/tools/transforms ''' diff --git a/tools/cgc_hlx/SConscript b/tools/cgc_hlx/SConscript index 869e57028..cbdf9abec 100644 --- a/tools/cgc_hlx/SConscript +++ b/tools/cgc_hlx/SConscript @@ -10,7 +10,6 @@ cpppath=''' $SECURITY_TRANSFORMS_HOME/include $SECURITY_TRANSFORMS_HOME/libIRDB/include $SECURITY_TRANSFORMS_HOME/libMEDSannotation/include - $SECURITY_TRANSFORMS_HOME/beaengine/include $SECURITY_TRANSFORMS_HOME/tools/transforms ''' diff --git a/tools/cgc_rigrandom/SConscript b/tools/cgc_rigrandom/SConscript index e3c18a29a..42c86a841 100644 --- a/tools/cgc_rigrandom/SConscript +++ b/tools/cgc_rigrandom/SConscript @@ -11,7 +11,6 @@ myenv.Replace(SECURITY_TRANSFORMS_HOME=os.environ['SECURITY_TRANSFORMS_HOME']) cpppath=''' $SECURITY_TRANSFORMS_HOME/include $SECURITY_TRANSFORMS_HOME/libIRDB/include - $SECURITY_TRANSFORMS_HOME/beaengine/include $SECURITY_TRANSFORMS_HOME/tools/transforms ''' diff --git a/tools/cgclibc/SConscript b/tools/cgclibc/SConscript index 5dc6aeb2e..9f51204c3 100644 --- a/tools/cgclibc/SConscript +++ b/tools/cgclibc/SConscript @@ -10,7 +10,6 @@ myenv.Replace(SECURITY_TRANSFORMS_HOME=os.environ['SECURITY_TRANSFORMS_HOME']) cpppath=''' $SECURITY_TRANSFORMS_HOME/include $SECURITY_TRANSFORMS_HOME/libIRDB/include - $SECURITY_TRANSFORMS_HOME/beaengine/include $SECURITY_TRANSFORMS_HOME/libMEDSannotation/include $SECURITY_TRANSFORMS_HOME/tools/transforms ''' diff --git a/tools/cinderella/SConscript b/tools/cinderella/SConscript index 311ac77f7..6ac61cc85 100644 --- a/tools/cinderella/SConscript +++ b/tools/cinderella/SConscript @@ -10,7 +10,6 @@ cpppath=''' $SECURITY_TRANSFORMS_HOME/include $SECURITY_TRANSFORMS_HOME/libIRDB/include $SECURITY_TRANSFORMS_HOME/libMEDSannotation/include - $SECURITY_TRANSFORMS_HOME/beaengine/include $SECURITY_TRANSFORMS_HOME/tools/transforms ''' diff --git a/tools/cookbook/SConscript b/tools/cookbook/SConscript index 021d8cfff..23f1d8ec7 100644 --- a/tools/cookbook/SConscript +++ b/tools/cookbook/SConscript @@ -8,7 +8,6 @@ cpppath=''' $SECURITY_TRANSFORMS_HOME/include $SECURITY_TRANSFORMS_HOME/libIRDB/include $SECURITY_TRANSFORMS_HOME/libMEDSannotation/include - $SECURITY_TRANSFORMS_HOME/beaengine/include $SECURITY_TRANSFORMS_HOME/tools/transforms $SECURITY_TRANSFORMS_HOME/libtransform/include ./ diff --git a/tools/cover/SConscript b/tools/cover/SConscript index 1e7631410..1126bab03 100644 --- a/tools/cover/SConscript +++ b/tools/cover/SConscript @@ -9,7 +9,6 @@ myenv.Replace(SECURITY_TRANSFORMS_HOME=os.environ['SECURITY_TRANSFORMS_HOME']) cpppath=''' $SECURITY_TRANSFORMS_HOME/include $SECURITY_TRANSFORMS_HOME/libIRDB/include - $SECURITY_TRANSFORMS_HOME/beaengine/include $SECURITY_TRANSFORMS_HOME/tools/transforms ''' diff --git a/tools/dump_map/SConscript b/tools/dump_map/SConscript index 222a689b2..f63bc33c5 100644 --- a/tools/dump_map/SConscript +++ b/tools/dump_map/SConscript @@ -10,7 +10,6 @@ cpppath=''' $SECURITY_TRANSFORMS_HOME/include $SECURITY_TRANSFORMS_HOME/libIRDB/include $SECURITY_TRANSFORMS_HOME/libMEDSannotation/include - $SECURITY_TRANSFORMS_HOME/beaengine/include $SECURITY_TRANSFORMS_HOME/tools/transforms ''' diff --git a/tools/fix_canaries/SConscript b/tools/fix_canaries/SConscript index 08bd42059..95cf7a2ff 100644 --- a/tools/fix_canaries/SConscript +++ b/tools/fix_canaries/SConscript @@ -9,7 +9,6 @@ cpppath=''' $SECURITY_TRANSFORMS_HOME/include $SECURITY_TRANSFORMS_HOME/libIRDB/include $SECURITY_TRANSFORMS_HOME/libEXEIO/include - $SECURITY_TRANSFORMS_HOME/beaengine/include $SECURITY_TRANSFORMS_HOME/tools/transforms $SECURITY_TRANSFORMS_HOME/xform $SECURITY_TRANSFORMS_HOME/libMEDSannotation/include diff --git a/tools/fix_rets/SConscript b/tools/fix_rets/SConscript index ee40ed515..ee122fcaf 100644 --- a/tools/fix_rets/SConscript +++ b/tools/fix_rets/SConscript @@ -10,7 +10,6 @@ cpppath=''' $SECURITY_TRANSFORMS_HOME/include $SECURITY_TRANSFORMS_HOME/libIRDB/include $SECURITY_TRANSFORMS_HOME/libMEDSannotation/include - $SECURITY_TRANSFORMS_HOME/beaengine/include $SECURITY_TRANSFORMS_HOME/tools/transforms ''' diff --git a/tools/fix_rets/fix_rets.cpp b/tools/fix_rets/fix_rets.cpp index 87182062e..1c3eb0bed 100644 --- a/tools/fix_rets/fix_rets.cpp +++ b/tools/fix_rets/fix_rets.cpp @@ -21,7 +21,6 @@ #include "fix_rets.hpp" #include <assert.h> -#include <bea_deprecated.hpp> using namespace libTransform; @@ -72,13 +71,14 @@ int FixRets::execute() { if (insn!=NULL) { - DISASM disasm; - Disassemble(insn,disasm); + //DISASM disasm; + //Disassemble(insn,disasm); + const auto disasm=DecodedInstruction_t(insn); string stack_pointer; string stack_offset_size; - cout << "Complete instruction: " << disasm.CompleteInstr << "-" << endl; - if (strcmp(disasm.CompleteInstr,"ret ")) + cout << "Complete instruction: " << disasm.getDisassembly() << "-" << endl; + if (disasm.isReturn()) // strcmp(disasm.CompleteInstr,"ret ")) continue; if (insn->GetIndirectBranchTargetAddress()) { diff --git a/tools/hook_dynamic_call/SConscript b/tools/hook_dynamic_call/SConscript index aee9b1d2a..62f2090ff 100644 --- a/tools/hook_dynamic_call/SConscript +++ b/tools/hook_dynamic_call/SConscript @@ -9,7 +9,6 @@ cpppath=''' $SECURITY_TRANSFORMS_HOME/include $SECURITY_TRANSFORMS_HOME/libIRDB/include $SECURITY_TRANSFORMS_HOME/libEXEIO/include - $SECURITY_TRANSFORMS_HOME/beaengine/include $SECURITY_TRANSFORMS_HOME/tools/transforms $SECURITY_TRANSFORMS_HOME/xform $SECURITY_TRANSFORMS_HOME/libMEDSannotation/include diff --git a/tools/hook_start/SConscript b/tools/hook_start/SConscript index 0af42c3ba..ca54cb4ae 100644 --- a/tools/hook_start/SConscript +++ b/tools/hook_start/SConscript @@ -9,7 +9,6 @@ cpppath=''' $SECURITY_TRANSFORMS_HOME/include $SECURITY_TRANSFORMS_HOME/libIRDB/include $SECURITY_TRANSFORMS_HOME/libEXEIO/include - $SECURITY_TRANSFORMS_HOME/beaengine/include $SECURITY_TRANSFORMS_HOME/tools/transforms $SECURITY_TRANSFORMS_HOME/xform $SECURITY_TRANSFORMS_HOME/libMEDSannotation/include diff --git a/tools/inferfn/SConscript b/tools/inferfn/SConscript index 35523eae7..a9d424917 100644 --- a/tools/inferfn/SConscript +++ b/tools/inferfn/SConscript @@ -10,7 +10,6 @@ cpppath=''' $SECURITY_TRANSFORMS_HOME/include $SECURITY_TRANSFORMS_HOME/libIRDB/include $SECURITY_TRANSFORMS_HOME/libMEDSannotation/include - $SECURITY_TRANSFORMS_HOME/beaengine/include $SECURITY_TRANSFORMS_HOME/tools/transforms ''' diff --git a/tools/meds2pdb/SConscript b/tools/meds2pdb/SConscript index e0798fbc0..5ae7770fc 100644 --- a/tools/meds2pdb/SConscript +++ b/tools/meds2pdb/SConscript @@ -12,7 +12,6 @@ cpppath=''' $SECURITY_TRANSFORMS_HOME/libEXEIO/include $SECURITY_TRANSFORMS_HOME/libIRDB/include $SECURITY_TRANSFORMS_HOME/libMEDSannotation/include - $SECURITY_TRANSFORMS_HOME/beaengine/include $SECURITY_TRANSFORMS_HOME/tools/transforms ''' diff --git a/tools/memcover/SConscript b/tools/memcover/SConscript index 41db0300f..ae5c93b00 100644 --- a/tools/memcover/SConscript +++ b/tools/memcover/SConscript @@ -10,7 +10,6 @@ cpppath=''' $SECURITY_TRANSFORMS_HOME/include $SECURITY_TRANSFORMS_HOME/libIRDB/include $SECURITY_TRANSFORMS_HOME/libMEDSannotation/include - $SECURITY_TRANSFORMS_HOME/beaengine/include $SECURITY_TRANSFORMS_HOME/tools/transforms ''' diff --git a/tools/prince/SConscript b/tools/prince/SConscript index 53e42da04..49a38296e 100644 --- a/tools/prince/SConscript +++ b/tools/prince/SConscript @@ -10,7 +10,6 @@ cpppath=''' $SECURITY_TRANSFORMS_HOME/include $SECURITY_TRANSFORMS_HOME/libIRDB/include $SECURITY_TRANSFORMS_HOME/libMEDSannotation/include - $SECURITY_TRANSFORMS_HOME/beaengine/include $SECURITY_TRANSFORMS_HOME/tools/transforms $ZIPR_CALLBACKS/inferfn ''' diff --git a/tools/print_cfi_stats/SConscript b/tools/print_cfi_stats/SConscript index 8ee84510d..553c9b6e9 100644 --- a/tools/print_cfi_stats/SConscript +++ b/tools/print_cfi_stats/SConscript @@ -10,7 +10,6 @@ cpppath=''' $SECURITY_TRANSFORMS_HOME/include $SECURITY_TRANSFORMS_HOME/libIRDB/include $SECURITY_TRANSFORMS_HOME/libMEDSannotation/include - $SECURITY_TRANSFORMS_HOME/beaengine/include $SECURITY_TRANSFORMS_HOME/tools/transforms ''' diff --git a/tools/ret_shadow_stack/SConscript b/tools/ret_shadow_stack/SConscript index 121e60251..47badfe06 100644 --- a/tools/ret_shadow_stack/SConscript +++ b/tools/ret_shadow_stack/SConscript @@ -10,7 +10,6 @@ cpppath=''' $SECURITY_TRANSFORMS_HOME/include $SECURITY_TRANSFORMS_HOME/libIRDB/include $SECURITY_TRANSFORMS_HOME/libMEDSannotation/include - $SECURITY_TRANSFORMS_HOME/beaengine/include $SECURITY_TRANSFORMS_HOME/tools/transforms ''' diff --git a/tools/ret_shadow_stack/rss_instrument.cpp b/tools/ret_shadow_stack/rss_instrument.cpp index e37d18d31..e80318063 100644 --- a/tools/ret_shadow_stack/rss_instrument.cpp +++ b/tools/ret_shadow_stack/rss_instrument.cpp @@ -25,7 +25,6 @@ #include "MEDS_ProblemFuncAnnotation.hpp" #include "Rewrite_Utility.hpp" #include <stdlib.h> -#include <bea_deprecated.hpp> @@ -276,10 +275,10 @@ bool RSS_Instrument::add_rss_push(FileIR_t* firp, Instruction_t* insn) if(getenv("RSS_VERBOSE")!=NULL) { - DISASM d; - Disassemble(insn,d); + //DISASM d; + //Disassemble(insn,d); cout<<"Adding push instrumentation at 0x"<<std::hex<<insn->GetAddress()->GetVirtualOffset() - << " disasm="<<d.CompleteInstr <<endl; + << " disasm="<<insn->getDisassembly() <<endl; } if(do_zipr) @@ -319,10 +318,10 @@ bool RSS_Instrument::add_rss_pop(FileIR_t* firp, Instruction_t* insn) if(getenv("RSS_VERBOSE")!=NULL) { - DISASM d; - Disassemble(insn,d); + //DISASM d; + //Disassemble(insn,d); cout<<"Adding pop instrumentation at 0x"<<std::hex<<insn->GetAddress()->GetVirtualOffset() - << " disasm="<<d.CompleteInstr <<endl; + << " disasm="<<insn->getDisassembly() <<endl; } if(do_zipr) { @@ -392,9 +391,10 @@ bool RSS_Instrument::add_rss_pop(FileIR_t* firp, Instruction_t* insn) static bool is_exit_instruction(Instruction_t *insn, MEDS_AnnotationParser *meds_ap) { - DISASM d; - Disassemble(insn,d); - if(strstr(d.CompleteInstr,"ret")!=0) + //DISASM d; + //Disassemble(insn,d); + const auto d=DecodedInstruction_t(insn); + if(d.isReturn()) // strstr(d.CompleteInstr,"ret")!=0) return true; assert(meds_ap); diff --git a/tools/safefn/SConscript b/tools/safefn/SConscript index ead7daf0d..94fa9aa68 100644 --- a/tools/safefn/SConscript +++ b/tools/safefn/SConscript @@ -10,7 +10,6 @@ cpppath=''' $SECURITY_TRANSFORMS_HOME/include $SECURITY_TRANSFORMS_HOME/libIRDB/include $SECURITY_TRANSFORMS_HOME/libMEDSannotation/include - $SECURITY_TRANSFORMS_HOME/beaengine/include $SECURITY_TRANSFORMS_HOME/tools/transforms ''' diff --git a/tools/safefr/SConscript b/tools/safefr/SConscript index 5770d5e30..c67dc5a0e 100644 --- a/tools/safefr/SConscript +++ b/tools/safefr/SConscript @@ -10,7 +10,6 @@ cpppath=''' $SECURITY_TRANSFORMS_HOME/include $SECURITY_TRANSFORMS_HOME/libIRDB/include $SECURITY_TRANSFORMS_HOME/libMEDSannotation/include - $SECURITY_TRANSFORMS_HOME/beaengine/include $SECURITY_TRANSFORMS_HOME/tools/transforms ''' diff --git a/tools/selective_cfi/SConscript b/tools/selective_cfi/SConscript index 9ce978eb3..52e961537 100644 --- a/tools/selective_cfi/SConscript +++ b/tools/selective_cfi/SConscript @@ -10,7 +10,6 @@ cpppath=''' $SECURITY_TRANSFORMS_HOME/include $SECURITY_TRANSFORMS_HOME/libIRDB/include $SECURITY_TRANSFORMS_HOME/libMEDSannotation/include - $SECURITY_TRANSFORMS_HOME/beaengine/include $SECURITY_TRANSFORMS_HOME/tools/transforms $SECURITY_TRANSFORMS_HOME/libEXEIO/include ''' diff --git a/tools/simple_cdi/SConscript b/tools/simple_cdi/SConscript index 7859959fe..0966b77a8 100644 --- a/tools/simple_cdi/SConscript +++ b/tools/simple_cdi/SConscript @@ -10,7 +10,6 @@ cpppath=''' $SECURITY_TRANSFORMS_HOME/include $SECURITY_TRANSFORMS_HOME/libIRDB/include $SECURITY_TRANSFORMS_HOME/libMEDSannotation/include - $SECURITY_TRANSFORMS_HOME/beaengine/include $SECURITY_TRANSFORMS_HOME/tools/transforms ''' diff --git a/tools/simple_cdi/scdi_instr.cpp b/tools/simple_cdi/scdi_instr.cpp index d4c48ba22..91aad5f40 100644 --- a/tools/simple_cdi/scdi_instr.cpp +++ b/tools/simple_cdi/scdi_instr.cpp @@ -25,7 +25,7 @@ #include "utils.hpp" #include "scdi_instr.hpp" #include "Rewrite_Utility.hpp" -#include <bea_deprecated.hpp> +//#include <bea_deprecated.hpp> using namespace std; using namespace libIRDB; @@ -224,12 +224,13 @@ bool SimpleCDI_Instrument::add_scdi_instrumentation(Instruction_t* insn) } ICFS_t* ibts=insn->GetIBTargets(); - DISASM d; - Disassemble(insn,d); + //DISASM d; + //Disassemble(insn,d); + const auto d=DecodedInstruction_t(insn); if(getenv("SimpleCDI_VERBOSE")!=NULL && ibts) { - cout <<"["<<string(d.CompleteInstr)<<"] [" << string(d.Instruction.Mnemonic)<< "] IBTargets size: " << ibts->size() << " analysis_status: " << ibts->GetAnalysisStatus() << endl; + cout <<"["<<d.getDisassembly()<<"] [" << d.getMnemonic()<< "] IBTargets size: " << ibts->size() << " analysis_status: " << ibts->GetAnalysisStatus() << endl; } if (is_return(insn)) @@ -264,14 +265,16 @@ bool SimpleCDI_Instrument::add_scdi_instrumentation(Instruction_t* insn) } } - assert(strstr("ret ", d.Instruction.Mnemonic)==NULL); - assert(strstr("retn ", d.Instruction.Mnemonic)==NULL); + //assert(strstr("ret ", d.Instruction.Mnemonic)==NULL); + //assert(strstr("retn ", d.Instruction.Mnemonic)==NULL); + assert(!d.isReturn()) ; // pre-instrument // push reg // mov reg, <target> string reg="rcx"; - string addr_mode=(strstr(d.CompleteInstr," ")); + //string addr_mode=(strstr(d.CompleteInstr," ")); + string addr_mode=d.getOperand(0).getString(); Instruction_t* tmp=insn; insertAssemblyBefore(firp,tmp,"push "+reg); @@ -310,9 +313,10 @@ bool SimpleCDI_Instrument::is_return(Instruction_t* insn) { if (insn) { - DISASM d; - Disassemble(insn,d); - return string(d.Instruction.Mnemonic) == string("ret "); + //DISASM d; + //Disassemble(insn,d); + const auto d=DecodedInstruction_t(insn); + return d.isReturn(); // string(d.Instruction.Mnemonic) == string("ret "); // FIXME: handle retn immd, but this means the instrumentation should pop/lea immd /* return (string(d.Instruction.Mnemonic) == string("ret ") || diff --git a/tools/spasm/SConscript b/tools/spasm/SConscript index 052e06ac9..5e881b1db 100644 --- a/tools/spasm/SConscript +++ b/tools/spasm/SConscript @@ -10,7 +10,6 @@ cpppath=''' $SECURITY_TRANSFORMS_HOME/include $SECURITY_TRANSFORMS_HOME/libIRDB/include $SECURITY_TRANSFORMS_HOME/libMEDSannotation/include - $SECURITY_TRANSFORMS_HOME/beaengine/include $SECURITY_TRANSFORMS_HOME/tools/transforms ''' diff --git a/tools/transforms/SConscript b/tools/transforms/SConscript index ae5d949e9..7cc87696d 100644 --- a/tools/transforms/SConscript +++ b/tools/transforms/SConscript @@ -11,9 +11,7 @@ cpppath=''' $SECURITY_TRANSFORMS_HOME/libIRDB/include/ $SECURITY_TRANSFORMS_HOME/libMEDSannotation/include/ $SECURITY_TRANSFORMS_HOME/libtransform/include/ - $SECURITY_TRANSFORMS_HOME/beaengine/include $SECURITY_TRANSFORMS_HOME/libEXEIO/include - $SECURITY_TRANSFORMS_HOME/beaengine/beaengineSources/Includes/ ''' LIBS= " xform IRDB-cfg MEDSannotation transform " + env.subst('$BASE_IRDB_LIBS') diff --git a/xform/SConscript b/xform/SConscript index 4288b0ac3..26e7d6fd6 100644 --- a/xform/SConscript +++ b/xform/SConscript @@ -21,7 +21,7 @@ files= ''' stackref_hash.c ''' cpppath=''' - $SECURITY_TRANSFORMS_HOME/beaengine/include/ + $SECURITY_TRANSFORMS_HOME/libIRDB/include/ $SECURITY_TRANSFORMS_HOME/libEXEIO/include/ $SECURITY_TRANSFORMS_HOME/include/ ''' @@ -29,6 +29,7 @@ cpppath=''' CFLAGS="-fPIC -DUBUNTU" myenv=myenv.Clone(CC="$CXX", CPPPATH=Split(cpppath), CFLAGS=CFLAGS) +myenv.Append(CXXFLAGS=" -std=c++11 ") lib=myenv.Library(lib, Split(files)) install=myenv.Install("$SECURITY_TRANSFORMS_HOME/lib/", lib) diff --git a/xform/rewriter.cpp b/xform/rewriter.cpp index 40424be8b..672647dc5 100644 --- a/xform/rewriter.cpp +++ b/xform/rewriter.cpp @@ -22,11 +22,9 @@ #include <string> #include <set> #include <stdlib.h> +#include <libIRDB-core.hpp> - -#include "beaengine/BeaEngine.h" - #include "all.h" #include "targ-config.h" #include "elfio/elfio.hpp" @@ -37,6 +35,7 @@ using namespace std; +using namespace libIRDB; Rewriter::Rewriter(char *p_elfPath, char *p_annotationFilePath) { @@ -633,7 +632,7 @@ after_loop: */ void Rewriter::readElfFile(char p_filename[]) { - char buf[1000]; + static char buf[64*1024]; char* objdump=getenv("PS_OBJDUMP"); if(!objdump) objdump=strdup("objdump"); @@ -664,6 +663,11 @@ void Rewriter::readElfFile(char p_filename[]) */ void Rewriter::disassemble() { + if(getElfReader()->isElf64() || getElfReader()->isPe64()) + FileIR_t::SetArchitectureBitWidth(64); + else + FileIR_t::SetArchitectureBitWidth(32); + // for every instruction, grab from ELF // disassemble @@ -676,36 +680,31 @@ void Rewriter::disassemble() wahoo::Instruction *instr = instructions[j]; // disassemble using BeaEngine - DISASM disasm; - memset(&disasm, 0, sizeof(DISASM)); + //DISASM disasm; + //memset(&disasm, 0, sizeof(DISASM)); - disasm.Options = NasmSyntax + PrefixedNumeral; + //disasm.Options = NasmSyntax + PrefixedNumeral; - if(getElfReader()->isElf64() || getElfReader()->isPe64()) - disasm.Archi = 64; - - else - disasm.Archi = 32; + //disasm.EIP = (UIntPtr) getElfReader()->getInstructionBuffer(instr->getAddress()); + //disasm.VirtualAddr = instr->getAddress(); - disasm.EIP = (UIntPtr) getElfReader()->getInstructionBuffer(instr->getAddress()); - disasm.VirtualAddr = instr->getAddress(); + const auto instr_data=(void*)(getElfReader()->getInstructionBuffer(instr->getAddress())); + const auto disasm=DecodedInstruction_t(instr->getAddress(), instr_data, 16); - int instr_len = 0; /* maybe this isn't in a section so getInstructionBuffer returns 0 */ - if(disasm.EIP) - instr_len=Disasm(&disasm); - if(instr_len>0) + if(disasm.valid()) { - instr->setAsm(string(disasm.CompleteInstr)); + const auto instr_len = disasm.length() ; //Disasm(&disasm); + instr->setAsm(disasm.getDisassembly()); instr->setSize(instr_len); - instr->setData((void*)disasm.EIP); + instr->setData(instr_data); } else { - cerr<<"BeaEngine has decided that instruction at "<<hex + cerr<<"Decided that instruction at "<<hex <<instr->getAddress()<<dec<<" is bogus."<<endl; /* bogus intruction, remove it */ m_instructions[instr->getAddress()]=NULL; -- GitLab