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