diff options
Diffstat (limited to 'example/expression')
| -rw-r--r-- | example/expression/constant_propagation.py | 6 | ||||
| -rw-r--r-- | example/expression/graph_dataflow.py | 24 | ||||
| -rw-r--r-- | example/expression/solve_condition_stp.py | 9 |
3 files changed, 17 insertions, 22 deletions
diff --git a/example/expression/constant_propagation.py b/example/expression/constant_propagation.py index 0798c404..e70f8163 100644 --- a/example/expression/constant_propagation.py +++ b/example/expression/constant_propagation.py @@ -6,7 +6,6 @@ A "constant expression" is an expression based on constants or init regs. from argparse import ArgumentParser -from miasm2.arch.x86.disasm import dis_x86_32 as dis_engine from miasm2.analysis.machine import Machine from miasm2.analysis.binary import Container from miasm2.analysis.cst_propag import propagate_cst_expr @@ -27,9 +26,8 @@ args = parser.parse_args() machine = Machine("x86_32") cont = Container.from_stream(open(args.filename)) -ira, dis_engine = machine.ira, machine.dis_engine -mdis = dis_engine(cont.bin_stream) -ir_arch = ira(mdis.loc_db) +mdis = machine.dis_engine(cont.bin_stream, loc_db=cont.loc_db) +ir_arch = machine.ira(mdis.loc_db) addr = int(args.address, 0) asmcfg = mdis.dis_multiblock(addr) diff --git a/example/expression/graph_dataflow.py b/example/expression/graph_dataflow.py index 0951cc1e..92bcf249 100644 --- a/example/expression/graph_dataflow.py +++ b/example/expression/graph_dataflow.py @@ -1,10 +1,8 @@ from argparse import ArgumentParser -from pdb import pm -from pprint import pprint +from miasm2.analysis.binary import Container +from miasm2.analysis.machine import Machine from miasm2.expression.expression import get_expr_mem -from miasm2.arch.x86.ira import ir_a_x86_32 -from miasm2.arch.x86.disasm import dis_x86_32 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 @@ -82,7 +80,7 @@ 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) -def node2str(self, node): +def node2str(node): out = "%s,%s\\l\\\n%s" % node return out @@ -101,9 +99,9 @@ def gen_block_data_flow_graph(ir_arch, ircfg, ad, block_flow_cb): if offset == ad: irblock_0 = irblock break - assert(irblock_0 is not None) + assert irblock_0 is not None flow_graph = DiGraph() - flow_graph.node2str = lambda n: node2str(flow_graph, n) + flow_graph.node2str = node2str irb_in_nodes = {} @@ -128,19 +126,21 @@ def gen_block_data_flow_graph(ir_arch, ircfg, ad, block_flow_cb): open('data.dot', 'w').write(flow_graph.dot()) -data = open(args.filename).read() ad = int(args.addr, 16) print 'disasm...' -mdis = dis_x86_32(data) +cont = Container.from_stream(open(args.filename)) +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 'generating dataflow graph for:' -ir_arch = ir_a_x86_32(mdis.loc_db) -ircfg = ir_arch.new_ircfg_from_asmcfg(asmcfg) +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 @@ -151,7 +151,7 @@ if args.symb: else: block_flow_cb = intra_block_flow_raw -gen_block_data_flow_graph(ir_arch, ircfg, ad, block_flow_cb) +gen_block_data_flow_graph(ir_arch_analysis, ircfg, ad, block_flow_cb) print '*' * 40 print """ diff --git a/example/expression/solve_condition_stp.py b/example/expression/solve_condition_stp.py index 6962e2ef..c79dd0b8 100644 --- a/example/expression/solve_condition_stp.py +++ b/example/expression/solve_condition_stp.py @@ -4,13 +4,13 @@ from optparse import OptionParser from pdb import pm from miasm2.analysis.machine import Machine +from miasm2.analysis.binary import Container from miasm2.expression.expression import ExprInt, ExprCond, ExprId, \ get_expr_ids, ExprAssign, ExprLoc from miasm2.core.bin_stream import bin_stream_str from miasm2.ir.symbexec import SymbolicExecutionEngine, get_block from miasm2.expression.simplifications import expr_simp from miasm2.core import parse_asm -from miasm2.arch.x86.disasm import dis_x86_32 as dis_engine from miasm2.ir.translators.translator import Translator machine = Machine("x86_32") @@ -78,14 +78,11 @@ def emul_symb(ir_arch, ircfg, mdis, states_todo, states_done): if __name__ == '__main__': translator_smt2 = Translator.to_language("smt2") - data = open(args[0]).read() - bs = bin_stream_str(data) - - mdis = dis_engine(bs) addr = int(options.address, 16) - + cont = Container.from_stream(open(args[0])) + mdis = machine.dis_engine(cont.bin_stream, loc_db=cont.loc_db) ir_arch = machine.ir(mdis.loc_db) ircfg = ir_arch.new_ircfg() symbexec = SymbolicExecutionEngine(ir_arch) |