about summary refs log tree commit diff stats
path: root/example/expression/graph_dataflow.py
diff options
context:
space:
mode:
authorFabrice Desclaux <fabrice.desclaux@cea.fr>2018-06-22 19:49:09 +0200
committerFabrice Desclaux <fabrice.desclaux@cea.fr>2018-07-05 16:14:26 +0200
commit195c688da01add6d4d964addfe7e34bea78bdb03 (patch)
tree80b346193da5609d19cdfc389ea84ad66399fa67 /example/expression/graph_dataflow.py
parent3e86fb7046eef0adef023207cb4875174b26beea (diff)
downloadfocaccia-miasm-195c688da01add6d4d964addfe7e34bea78bdb03.tar.gz
focaccia-miasm-195c688da01add6d4d964addfe7e34bea78bdb03.zip
IR: gen ircfg from ir_arch
Diffstat (limited to 'example/expression/graph_dataflow.py')
-rw-r--r--example/expression/graph_dataflow.py30
1 files changed, 14 insertions, 16 deletions
diff --git a/example/expression/graph_dataflow.py b/example/expression/graph_dataflow.py
index dd9d3e9b..b30bd29f 100644
--- a/example/expression/graph_dataflow.py
+++ b/example/expression/graph_dataflow.py
@@ -28,7 +28,7 @@ def get_node_name(label, i, n):
     return n_name
 
 
-def intra_block_flow_symb(ir_arch, flow_graph, irblock, in_nodes, out_nodes):
+def intra_block_flow_symb(ir_arch, _, flow_graph, irblock, in_nodes, out_nodes):
     symbols_init = ir_arch.arch.regs.regs_init.copy()
     sb = SymbolicExecutionEngine(ir_arch, symbols_init)
     sb.eval_updt_irblock(irblock)
@@ -87,17 +87,17 @@ def node2str(self, node):
     return out
 
 
-def gen_block_data_flow_graph(ir_arch, ad, block_flow_cb):
-    for irblock in ir_arch.blocks.values():
+def gen_block_data_flow_graph(ir_arch, ircfg, ad, block_flow_cb):
+    for irblock in ircfg.blocks.values():
         print irblock
 
-    dead_simp(ir_arch)
+    dead_simp(ir_arch, ircfg)
 
 
     irblock_0 = None
-    for irblock in ir_arch.blocks.values():
+    for irblock in ircfg.blocks.values():
         loc_key = irblock.loc_key
-        offset = ir_arch.loc_db.get_location_offset(loc_key)
+        offset = ircfg.loc_db.get_location_offset(loc_key)
         if offset == ad:
             irblock_0 = irblock
             break
@@ -108,20 +108,20 @@ def gen_block_data_flow_graph(ir_arch, ad, block_flow_cb):
 
     irb_in_nodes = {}
     irb_out_nodes = {}
-    for label in ir_arch.blocks:
+    for label in ircfg.blocks:
         irb_in_nodes[label] = {}
         irb_out_nodes[label] = {}
 
-    for label, irblock in ir_arch.blocks.iteritems():
-        block_flow_cb(ir_arch, flow_graph, irblock, irb_in_nodes[label], irb_out_nodes[label])
+    for label, irblock in ircfg.blocks.iteritems():
+        block_flow_cb(ir_arch, ircfg, flow_graph, irblock, irb_in_nodes[label], irb_out_nodes[label])
 
-    for label in ir_arch.blocks:
+    for label in ircfg.blocks:
         print label
         print 'IN', [str(x) for x in irb_in_nodes[label]]
         print 'OUT', [str(x) for x in irb_out_nodes[label]]
 
     print '*' * 20, 'interblock', '*' * 20
-    inter_block_flow(ir_arch, flow_graph, irblock_0.loc_key, irb_in_nodes, irb_out_nodes)
+    inter_block_flow(ir_arch, ircfg, flow_graph, irblock_0.loc_key, irb_in_nodes, irb_out_nodes)
 
     # from graph_qt import graph_qt
     # graph_qt(flow_graph)
@@ -140,11 +140,9 @@ print 'ok'
 
 print 'generating dataflow graph for:'
 ir_arch = ir_a_x86_32(mdis.loc_db)
+ircfg = ir_arch.new_ircfg_from_asmcfg(asmcfg)
 
-for block in asmcfg.blocks:
-    print block
-    ir_arch.add_block(block)
-for irblock in ir_arch.blocks.values():
+for irblock in ircfg.blocks.values():
     print irblock
 
 
@@ -153,7 +151,7 @@ if args.symb:
 else:
     block_flow_cb = intra_block_flow_raw
 
-gen_block_data_flow_graph(ir_arch, ad, block_flow_cb)
+gen_block_data_flow_graph(ir_arch, ircfg, ad, block_flow_cb)
 
 print '*' * 40
 print """