about summary refs log tree commit diff stats
path: root/miasm/analysis/disasm_cb.py
diff options
context:
space:
mode:
Diffstat (limited to 'miasm/analysis/disasm_cb.py')
-rw-r--r--miasm/analysis/disasm_cb.py47
1 files changed, 23 insertions, 24 deletions
diff --git a/miasm/analysis/disasm_cb.py b/miasm/analysis/disasm_cb.py
index f3480598..af47603b 100644
--- a/miasm/analysis/disasm_cb.py
+++ b/miasm/analysis/disasm_cb.py
@@ -11,8 +11,8 @@ from miasm.core.locationdb import LocationDB
 from miasm.core.utils import upck32
 
 
-def get_ira(mnemo, attrib):
-    arch = mnemo.name, attrib
+def get_ira(arch, attrib):
+    arch = arch.name, attrib
     if arch == ("arm", "arm"):
         from miasm.arch.arm.ira import ir_a_arm_base as ira
     elif arch == ("x86", 32):
@@ -20,20 +20,20 @@ def get_ira(mnemo, attrib):
     elif arch == ("x86", 64):
         from miasm.arch.x86.ira import ir_a_x86_64 as ira
     else:
-        raise ValueError('unknown architecture: %s' % mnemo.name)
+        raise ValueError('unknown architecture: %s' % arch.name)
     return ira
 
 
-def arm_guess_subcall(
-    mnemo, attrib, pool_bin, cur_bloc, offsets_to_dis, loc_db):
-    ira = get_ira(mnemo, attrib)
+def arm_guess_subcall(dis_engine, cur_block, offsets_to_dis):
+    arch = dis_engine.arch
+    loc_db = dis_engine.loc_db
+    ira = get_ira(arch, dis_engine.attrib)
 
-    sp = LocationDB()
-    ir_arch = ira(sp)
+    ir_arch = ira(loc_db)
     ircfg = ira.new_ircfg()
     print('###')
-    print(cur_bloc)
-    ir_arch.add_asmblock_to_ircfg(cur_bloc, ircfg)
+    print(cur_block)
+    ir_arch.add_asmblock_to_ircfg(cur_block, ircfg)
 
     to_add = set()
     for irblock in viewvalues(ircfg.blocks):
@@ -43,14 +43,14 @@ def arm_guess_subcall(
             for e in exprs:
                 if e.dst == ir_arch.pc:
                     pc_val = e.src
-                if e.dst == mnemo.regs.LR:
+                if e.dst == arch.regs.LR:
                     lr_val = e.src
         if pc_val is None or lr_val is None:
             continue
         if not isinstance(lr_val, ExprInt):
             continue
 
-        l = cur_bloc.lines[-1]
+        l = cur_block.lines[-1]
         if lr_val.arg != l.offset + l.l:
             continue
         l = loc_db.get_or_create_offset_location(int(lr_val))
@@ -60,20 +60,20 @@ def arm_guess_subcall(
         offsets_to_dis.add(int(lr_val))
 
     for c in to_add:
-        cur_bloc.addto(c)
+        cur_block.addto(c)
 
 
-def arm_guess_jump_table(
-    mnemo, attrib, pool_bin, cur_bloc, offsets_to_dis, loc_db):
-    ira = get_ira(mnemo, attrib)
+def arm_guess_jump_table(dis_engine, cur_block, offsets_to_dis):
+    arch = dis_engine.arch
+    loc_db = dis_engine.loc_db
+    ira = get_ira(arch, dis_engine.attrib)
 
     jra = ExprId('jra')
     jrb = ExprId('jrb')
 
-    sp = LocationDB()
-    ir_arch = ira(sp)
+    ir_arch = ira(loc_db)
     ircfg = ira.new_ircfg()
-    ir_arch.add_asmblock_to_ircfg(cur_bloc, ircfg)
+    ir_arch.add_asmblock_to_ircfg(cur_block, ircfg)
 
     for irblock in viewvalues(ircfg.blocks):
         pc_val = None
@@ -105,7 +105,7 @@ def arm_guess_jump_table(
         while i < max_table_entry:
             i += 1
             try:
-                ad = upck32(pool_bin.getbytes(base_ad + 4 * i, 4))
+                ad = upck32(dis_engine.bin_stream.getbytes(base_ad + 4 * i, 4))
             except:
                 break
             if abs(ad - base_ad) > max_diff_addr:
@@ -117,12 +117,11 @@ def arm_guess_jump_table(
             offsets_to_dis.add(ad)
             l = loc_db.get_or_create_offset_location(ad)
             c = AsmConstraintTo(l)
-            cur_bloc.addto(c)
+            cur_block.addto(c)
 
 guess_funcs = []
 
 
-def guess_multi_cb(
-    mnemo, attrib, pool_bin, cur_bloc, offsets_to_dis, loc_db):
+def guess_multi_cb(dis_engine, cur_block, offsets_to_dis):
     for f in guess_funcs:
-        f(mnemo, attrib, pool_bin, cur_bloc, offsets_to_dis, loc_db)
+        f(dis_engine, cur_block, offsets_to_dis)