diff --git a/SConscript b/SConscript index 0ce5786a28eef412efef0a180bde43eaa6029d12..344397e4731fac9b7a00275a4405d78065433df8 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 88c8884d93d256636f3780b2e9aeeb5f755f4aa6..4a21a64f31c5230447090c2140824af7e1dd88f5 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 52d67b746180b7af60409dbd343c6896c2fefd01..f5ab686084ee38e6584d493ca472812b1b537dba 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 f2ac0acd1305b83ed56eca07189f0e7784e76737..4ab07aa7d169b7b7c14e628230fa3d39e470d283 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 0cde74ca7ab0f68e6cb9e97c48968f1a33622fc1..3c8e4f514b46d13396e3929f64ea1202f7eb7ed5 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 e034ad49cd1c367b6ebc25df8009c87fb85c088d..4c9236e0a85dc80fc01164d7b8775adea7a41524 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 cfa5ae99ddcc01e6c5fc876042db2f5bf757f39c..8abeb4b55e4e960bbf0542590f8f3caaa17832ad 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 520c75de87c971a366690f1ae07fb25a9173592a..a12157a5a099a745b87eae4d794d7a341c410d89 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 870242cf20a683e5c82066302c2e92841fc89cd0..358dafeb992a32b0b574f5a449c5d8cab3c566a2 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 41ea8016de64c8037e22fcbf060f2dea24df46cf..df81d3f68b85d0780f4b8b6c205ed523fcbd7f29 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 9a3b11f8f6fd21f248e90bfc233cf39dc1e7b462..a7657d5c51fce17d2dfe218b97f7535f3b2ef59e 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 49de2f8d4d17d2ec70bafe46632921f838cdf593..39077e80f43de7f1bb80531ba81754224761e563 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 0b3e8cae9b77aac83241b8a2ab5f6144c54232e0..189f129b91dea10c02306fe3ff6ba38ab190128f 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 7899582764dd59253bb4b8f7e88111d119939bed..87c0a9965a168532f706d124c186fcbd93b3a416 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 808fdadc18c1273d85a3997c587d330e8502822d..5bc248849384e6ead8f20dd1eb4a5de88200e06f 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 cba0a91efdcd5393f2cacf1d30aa96ffd0aaa824..48bfaeb0c02f32dca50c8e3c5950cba4b7047916 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 d8fcd0c99751503afef8b9a73b99a9b1e0c3fefa..9b7edc68ed668354128caa97e3bae001bed7d214 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 f11daa22ee123fdcda85be177b2114353191f8ad..51ed3f794a5d54c1acbd51b76c70c4ef82bab072 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 b385b93c32bc00c0a5ed15c42859bc21eebb282d..ebe7b9491ff43fe906e3a03691ff059af15af265 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 f5b2c05368459b7536a1f8354ff7367b0fcbbe47..b10819b62669227e46a45cc5cfc63a0c82e075cf 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 4a76c8bd93205ad2c719530a8124e0836199d551..65ed56dfa103341f771dc2d7fdc14e8ee4d6d47a 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 1debb3fb00f9bb7e07e53786794a57cc638e2dfc..81e16c5735b7682d28bbacab8ff27914dd7d59d4 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 17a3c69cccbe455ca90bddcf1a4ad5f225159acf..9233a064be699ccc92b7bd90f715b3fa27f43ce4 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 d5b8b4f33acfeaf1952a42137880360e9532faba..e20543abee5f26c8025763e2f56e23c2fa17aced 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 630d3365df2cf5f66865f79a059dca333b7f30b8..9112ce8749c9dba682438c9191eb724f7b212b72 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 9523749a76124e67bdf1963e870de473a33e6293..ef5b4a068e7144c496a9c5d724bae6dcda6e6299 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 869e57028777a1575f404a698fc8a3595699239b..cbdf9abec761327730eef6c8c7282af68a5badd0 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 e3c18a29aaa3ab3fb5355f388dc045265b37715f..42c86a841a2d28c49676702d4ac76efa4ce10547 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 5dc6aeb2e2167a2628726abbedfd3a1f218a78d1..9f51204c37dcbf065b5d89be38657a20eeb96da0 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 311ac77f7962c5e31086dd18dba937550fed7255..6ac61cc851bf8241ce11e3f2362958d9321c83c3 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 021d8cffff86af96ac68fa14ce4db0c09bcf2eeb..23f1d8ec7622fab865033f032c70ed0e7e633368 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 1e76314109859e9a6beb7a8bf62cafbcd6b67d17..1126bab03aef00bb6b4dbcf2176dd03edf3b943d 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 222a689b2f9e05b8b987e41ad46a72ecbc41eaa5..f63bc33c599072aea041c73aa4c26c7060bbe267 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 08bd42059a90850220b2f853e78b47baa2ed3b2f..95cf7a2ff625aae4319266728f73544dac118f51 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 ee40ed515b46d9c0d028518b47850e9cd38712f3..ee122fcaf76f95bf371b39ad95b5a23ed1629310 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 87182062ecdc6eea4236efd819ed1ad582607fa1..1c3eb0bed8f9c3641522743fad6cfaeef5696ebf 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 aee9b1d2a894a52b1fe3e23f3a8be5da99fc8b21..62f2090fff469ca5b7ebe5f290a9d3aa6e214932 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 0af42c3ba9898fcded24e1ae06e4604cdb65b04a..ca54cb4ae7b572989c94a8cb6355707a73a32bc9 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 35523eae79c62cdac9e6cd9461d5c41e355bf89a..a9d424917741730d9eb44b6d0ad4016d9e65edbb 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 e0798fbc067960f63645b1cf65708f1435908ebf..5ae7770fc3bc20e43245bc26a4371ed3bc416db9 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 41db0300f3dd10febba1468635256250e4bff3a5..ae5c93b0027d742970e99fc6873de9358a4e516f 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 53e42da040f00a415f252bc032f1eb6390895995..49a38296e0b0b1bd39feeee3fc363b0972c8d117 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 8ee84510d86decced082b76ce2a773fe4b6e68f0..553c9b6e9fe255acdd7ee5e9c14cdffd15f34bee 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 121e60251fc89adf73ab30ac5a07aa7dedb5a3be..47badfe065778952c0fae7546e5145e8c8f65d3b 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 e37d18d31ee6e8271ba64fe09746283e79bb8922..e803180636483fbe65231b8efd68209d11d8cd4e 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 ead7daf0d6457d2d32f67a310c16d2b381d44d6f..94fa9aa684188716fd42764bdfa847666a75afe1 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 5770d5e30c8a418486b9a6e1f48b16546908e838..c67dc5a0e551456db852876f28e027b766bbad2f 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 9ce978eb387bb24dd909997313e7319b2719bbd1..52e9615371d3d94767d0162b6dfc23d03addd4fe 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 7859959fe3fe947bfb7839924320725a3919ea1c..0966b77a8b98f96dd3bfaec614c0b37cac939850 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 d4c48ba22847cb4e7e4c20d751e60a9ab699c50e..91aad5f4028f71faf7090cd621905fb8d365726e 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 052e06ac926e3178497dc1ba0cb301ee37d473e6..5e881b1dbf0ba9b67ccfdeeaa46eb719ab207070 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 ae5d949e92cadcd8912e232f6ea873e954d2d70b..7cc87696db85994cc42b1297938529691c5c0326 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 4288b0ac35bf96ddb8764b4bb8573947e5b035d2..26e7d6fd697a7e9ea443ebe409a6d4d69b83b60f 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 40424be8b86b759a1c01757f8d198e95a5311dff..672647dc53c9a3626c17a234a02a552b5f239fbb 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;