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;