about summary refs log tree commit diff stats
path: root/example/expression
diff options
context:
space:
mode:
authorFabrice Desclaux <fabrice.desclaux@cea.fr>2017-10-03 17:20:38 +0200
committerFabrice Desclaux <fabrice.desclaux@cea.fr>2018-03-15 14:46:36 +0100
commit1b534d9ad543473f12ddcb631e0cddb0cbd54ff4 (patch)
tree5d5248ceb9358a1f497f4830e821e50afb340dba /example/expression
parentedabfcda0fa8c0dd8ab3017853b375b1ee24b754 (diff)
downloadmiasm-1b534d9ad543473f12ddcb631e0cddb0cbd54ff4.tar.gz
miasm-1b534d9ad543473f12ddcb631e0cddb0cbd54ff4.zip
Symbexec: use hashtable for mem symbols
Diffstat (limited to 'example/expression')
-rw-r--r--example/expression/graph_dataflow.py32
-rw-r--r--example/expression/solve_condition_stp.py8
2 files changed, 10 insertions, 30 deletions
diff --git a/example/expression/graph_dataflow.py b/example/expression/graph_dataflow.py
index 120cd73a..26fdd2ec 100644
--- a/example/expression/graph_dataflow.py
+++ b/example/expression/graph_dataflow.py
@@ -28,40 +28,19 @@ def get_node_name(label, i, n):
     return n_name
 
 
-def get_modified_symbols(sb):
-    # Get modified IDS
-    ids = sb.symbols.symbols_id.keys()
-    ids.sort()
-    out = {}
-    regs_init = sb.ir_arch.arch.regs.regs_init
-    for i in ids:
-        if i in regs_init and \
-                i in sb.symbols.symbols_id and \
-                sb.symbols.symbols_id[i] == regs_init[i]:
-            continue
-        out[i] = sb.symbols.symbols_id[i]
-
-    # Get mem IDS
-    mems = sb.symbols.symbols_mem.values()
-    for m, v in mems:
-        print m, v
-        out[m] = v
-    pprint([(str(x[0]), str(x[1])) for x in out.items()])
-    return out
-
-
 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.emulbloc(irblock)
+    sb.eval_updt_irblock(irblock)
     print '*' * 40
     print irblock
 
 
-    out = get_modified_symbols(sb)
+    out = sb.modified(mems=False)
     current_nodes = {}
     # Gen mem arg to mem node links
-    for dst, src in out.items():
+    for dst, src in out:
+        src = sb.eval_expr(dst)
         for n in [dst, src]:
 
             all_mems = set()
@@ -82,7 +61,8 @@ def intra_block_flow_symb(ir_arch, flow_graph, irblock, in_nodes, out_nodes):
                 flow_graph.add_uniq_edge(node_n_r, node_n_w)
 
     # Gen data flow links
-    for dst, src in out.items():
+    for dst in out:
+        src = sb.eval_expr(dst)
         nodes_r = src.get_r(mem_read=False, cst_read=True)
         nodes_w = set([dst])
         for n_r in nodes_r:
diff --git a/example/expression/solve_condition_stp.py b/example/expression/solve_condition_stp.py
index 24d2dd50..44b73043 100644
--- a/example/expression/solve_condition_stp.py
+++ b/example/expression/solve_condition_stp.py
@@ -45,9 +45,9 @@ def emul_symb(ir_arch, mdis, states_todo, states_done):
 
         print 'Run block:'
         print irblock
-        addr = symbexec.emulbloc(irblock)
+        addr = symbexec.eval_updt_irblock(irblock)
         print 'Final state:'
-        symbexec.dump_id()
+        symbexec.dump(mems=False)
 
         assert addr is not None
 
@@ -136,8 +136,8 @@ if __name__ == '__main__':
         line.offset, line.l = i, 1
     ir_arch.add_block(b)
     irb = get_block(ir_arch, mdis, 0)
-    symbexec.emulbloc(irb)
-    symbexec.dump_mem()
+    symbexec.eval_updt_irblock(irb)
+    symbexec.dump(ids=False)
 
     # reset ir_arch blocks
     ir_arch.blocks = {}