about summary refs log tree commit diff stats
path: root/miasm2/analysis/disasm_cb.py
diff options
context:
space:
mode:
Diffstat (limited to 'miasm2/analysis/disasm_cb.py')
-rw-r--r--miasm2/analysis/disasm_cb.py43
1 files changed, 16 insertions, 27 deletions
diff --git a/miasm2/analysis/disasm_cb.py b/miasm2/analysis/disasm_cb.py
index e759e313..d3278cb4 100644
--- a/miasm2/analysis/disasm_cb.py
+++ b/miasm2/analysis/disasm_cb.py
@@ -2,10 +2,9 @@
 
 from miasm2.expression.expression import ExprInt, ExprId, ExprMem, match_expr
 from miasm2.expression.simplifications import expr_simp
-from miasm2.core.asmblock \
-    import AsmSymbolPool, AsmConstraintNext, AsmConstraintTo
+from miasm2.core.asmblock import AsmConstraintNext, AsmConstraintTo
+from miasm2.core.locationdb import LocationDB
 from miasm2.core.utils import upck32
-# from miasm2.core.graph import DiGraph
 
 
 def get_ira(mnemo, attrib):
@@ -22,21 +21,19 @@ def get_ira(mnemo, attrib):
 
 
 def arm_guess_subcall(
-    mnemo, attrib, pool_bin, cur_bloc, offsets_to_dis, symbol_pool):
+    mnemo, attrib, pool_bin, cur_bloc, offsets_to_dis, loc_db):
     ira = get_ira(mnemo, attrib)
 
-    sp = AsmSymbolPool()
+    sp = LocationDB()
     ir_arch = ira(sp)
+    ircfg = ira.new_ircfg()
     print '###'
     print cur_bloc
-    ir_arch.add_block(cur_bloc)
+    ir_arch.add_asmblock_to_ircfg(cur_bloc, ircfg)
 
-    ir_blocks = ir_arch.blocks.values()
-    # flow_graph = DiGraph()
+    ir_blocks = ircfg.blocks.values()
     to_add = set()
     for irblock in ir_blocks:
-        # print 'X'*40
-        # print irblock
         pc_val = None
         lr_val = None
         for exprs in irblock:
@@ -53,43 +50,35 @@ def arm_guess_subcall(
         l = cur_bloc.lines[-1]
         if lr_val.arg != l.offset + l.l:
             continue
-        # print 'IS CALL!'
-        l = symbol_pool.getby_offset_create(int(lr_val))
+        l = loc_db.get_or_create_offset_location(int(lr_val))
         c = AsmConstraintNext(l)
 
         to_add.add(c)
         offsets_to_dis.add(int(lr_val))
 
-    # if to_add:
-    #    print 'R'*70
     for c in to_add:
-        # print c
         cur_bloc.addto(c)
 
 
 def arm_guess_jump_table(
-    mnemo, attrib, pool_bin, cur_bloc, offsets_to_dis, symbol_pool):
+    mnemo, attrib, pool_bin, cur_bloc, offsets_to_dis, loc_db):
     ira = get_ira(mnemo, attrib)
 
     jra = ExprId('jra')
     jrb = ExprId('jrb')
 
-    sp = AsmSymbolPool()
+    sp = LocationDB()
     ir_arch = ira(sp)
-    ir_arch.add_block(cur_bloc)
+    ircfg = ira.new_ircfg()
+    ir_arch.add_asmblock_to_ircfg(cur_bloc, ircfg)
 
-    ir_blocks = ir_arch.blocks.values()
+    ir_blocks = ircfg.blocks.values()
     for irblock in ir_blocks:
-        # print 'X'*40
-        # print irblock
         pc_val = None
-        # lr_val = None
         for exprs in irblock:
             for e in exprs:
                 if e.dst == ir_arch.pc:
                     pc_val = e.src
-                # if e.dst == mnemo.regs.LR:
-                #    lr_val = e.src
         if pc_val is None:
             continue
         if not isinstance(pc_val, ExprMem):
@@ -124,7 +113,7 @@ def arm_guess_jump_table(
 
         for ad in addrs:
             offsets_to_dis.add(ad)
-            l = symbol_pool.getby_offset_create(ad)
+            l = loc_db.get_or_create_offset_location(ad)
             c = AsmConstraintTo(l)
             cur_bloc.addto(c)
 
@@ -132,6 +121,6 @@ guess_funcs = []
 
 
 def guess_multi_cb(
-    mnemo, attrib, pool_bin, cur_bloc, offsets_to_dis, symbol_pool):
+    mnemo, attrib, pool_bin, cur_bloc, offsets_to_dis, loc_db):
     for f in guess_funcs:
-        f(mnemo, attrib, pool_bin, cur_bloc, offsets_to_dis, symbol_pool)
+        f(mnemo, attrib, pool_bin, cur_bloc, offsets_to_dis, loc_db)