diff options
| author | Camille Mougey <commial@gmail.com> | 2019-03-07 14:37:07 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-03-07 14:37:07 +0100 |
| commit | 4c2320b46250a8d6f8774e1218544b72a154cd8e (patch) | |
| tree | b67e7b072439f84109bd39dad8ed7f3f135224f8 /example/expression/graph_dataflow.py | |
| parent | eab809932871f91d6f4aa770fc321af9e156e0f5 (diff) | |
| parent | 26c1075723a02984da6d3bc7423c5c0c43082dc3 (diff) | |
| download | miasm-4c2320b46250a8d6f8774e1218544b72a154cd8e.tar.gz miasm-4c2320b46250a8d6f8774e1218544b72a154cd8e.zip | |
Merge pull request #990 from serpilliere/support_python2_python3
Support python2 python3
Diffstat (limited to 'example/expression/graph_dataflow.py')
| -rw-r--r-- | example/expression/graph_dataflow.py | 59 |
1 files changed, 29 insertions, 30 deletions
diff --git a/example/expression/graph_dataflow.py b/example/expression/graph_dataflow.py index 92bcf249..c320fba0 100644 --- a/example/expression/graph_dataflow.py +++ b/example/expression/graph_dataflow.py @@ -1,12 +1,15 @@ +from __future__ import print_function from argparse import ArgumentParser -from miasm2.analysis.binary import Container -from miasm2.analysis.machine import Machine -from miasm2.expression.expression import get_expr_mem -from miasm2.analysis.data_analysis import intra_block_flow_raw, inter_block_flow -from miasm2.core.graph import DiGraph -from miasm2.ir.symbexec import SymbolicExecutionEngine -from miasm2.analysis.data_flow import dead_simp +from future.utils import viewitems, viewvalues + +from miasm.analysis.binary import Container +from miasm.analysis.machine import Machine +from miasm.expression.expression import get_expr_mem +from miasm.analysis.data_analysis import intra_block_flow_raw, inter_block_flow +from miasm.core.graph import DiGraph +from miasm.ir.symbexec import SymbolicExecutionEngine +from miasm.analysis.data_flow import dead_simp parser = ArgumentParser("Simple expression use for generating dataflow graph") @@ -17,10 +20,6 @@ parser.add_argument("-s", "--symb", help="Symbolic execution mode", args = parser.parse_args() -def node_x_2_id(n, x): - return hash(str(n) + str(x)) & 0xffffffffffffffff - - def get_node_name(label, i, n): n_name = (label, i, n) return n_name @@ -30,8 +29,8 @@ 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) - print '*' * 40 - print irblock + print('*' * 40) + print(irblock) out = sb.modified(mems=False) @@ -86,14 +85,14 @@ def node2str(node): def gen_block_data_flow_graph(ir_arch, ircfg, ad, block_flow_cb): - for irblock in ircfg.blocks.values(): - print irblock + for irblock in viewvalues(ircfg.blocks): + print(irblock) dead_simp(ir_arch, ircfg) irblock_0 = None - for irblock in ircfg.blocks.values(): + for irblock in viewvalues(ircfg.blocks): loc_key = irblock.loc_key offset = ircfg.loc_db.get_location_offset(loc_key) if offset == ad: @@ -110,15 +109,15 @@ def gen_block_data_flow_graph(ir_arch, ircfg, ad, block_flow_cb): irb_in_nodes[label] = {} irb_out_nodes[label] = {} - for label, irblock in ircfg.blocks.iteritems(): + for label, irblock in viewitems(ircfg.blocks): block_flow_cb(ir_arch, ircfg, flow_graph, irblock, irb_in_nodes[label], irb_out_nodes[label]) 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(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 + print('*' * 20, 'interblock', '*' * 20) inter_block_flow(ir_arch, ircfg, flow_graph, irblock_0.loc_key, irb_in_nodes, irb_out_nodes) # from graph_qt import graph_qt @@ -128,22 +127,22 @@ def gen_block_data_flow_graph(ir_arch, ircfg, ad, block_flow_cb): ad = int(args.addr, 16) -print 'disasm...' -cont = Container.from_stream(open(args.filename)) +print('disasm...') +cont = Container.from_stream(open(args.filename, 'rb')) machine = Machine("x86_32") mdis = machine.dis_engine(cont.bin_stream, loc_db=cont.loc_db) mdis.follow_call = True asmcfg = mdis.dis_multiblock(ad) -print 'ok' +print('ok') -print 'generating dataflow graph for:' +print('generating dataflow graph for:') ir_arch_analysis = machine.ira(mdis.loc_db) ircfg = ir_arch_analysis.new_ircfg_from_asmcfg(asmcfg) -for irblock in ircfg.blocks.values(): - print irblock +for irblock in viewvalues(ircfg.blocks): + print(irblock) if args.symb: @@ -153,11 +152,11 @@ else: gen_block_data_flow_graph(ir_arch_analysis, ircfg, ad, block_flow_cb) -print '*' * 40 -print """ +print('*' * 40) +print(""" View with: dotty dataflow.dot or Generate ps with pdf: dot -Tps dataflow_xx.dot -o graph.ps -""" +""") |