diff options
| author | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2017-10-03 17:20:38 +0200 |
|---|---|---|
| committer | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2018-03-15 14:46:36 +0100 |
| commit | 1b534d9ad543473f12ddcb631e0cddb0cbd54ff4 (patch) | |
| tree | 5d5248ceb9358a1f497f4830e821e50afb340dba /example/expression | |
| parent | edabfcda0fa8c0dd8ab3017853b375b1ee24b754 (diff) | |
| download | miasm-1b534d9ad543473f12ddcb631e0cddb0cbd54ff4.tar.gz miasm-1b534d9ad543473f12ddcb631e0cddb0cbd54ff4.zip | |
Symbexec: use hashtable for mem symbols
Diffstat (limited to 'example/expression')
| -rw-r--r-- | example/expression/graph_dataflow.py | 32 | ||||
| -rw-r--r-- | example/expression/solve_condition_stp.py | 8 |
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 = {} |