diff options
| author | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2018-12-07 22:44:44 +0100 |
|---|---|---|
| committer | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2018-12-10 11:10:45 +0100 |
| commit | 5e620f04a458a7ff3fb72673f887c9423a40c1aa (patch) | |
| tree | 2dd12a15c7f3a038471e566d4a971b5934084a17 | |
| parent | cc722f808ec76a3edeb6503d3a8ada975ef0a3d5 (diff) | |
| download | miasm-5e620f04a458a7ff3fb72673f887c9423a40c1aa.tar.gz miasm-5e620f04a458a7ff3fb72673f887c9423a40c1aa.zip | |
Updt example api
| -rw-r--r-- | example/disasm/callback.py | 15 | ||||
| -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 | ||||
| -rw-r--r-- | example/symbol_exec/single_instr.py | 8 | ||||
| -rw-r--r-- | test/core/asmblock.py | 9 |
6 files changed, 34 insertions, 37 deletions
diff --git a/example/disasm/callback.py b/example/disasm/callback.py index b9a09c09..02416b38 100644 --- a/example/disasm/callback.py +++ b/example/disasm/callback.py @@ -1,6 +1,6 @@ -from miasm2.core.bin_stream import bin_stream_str +from miasm2.analysis.binary import Container +from miasm2.analysis.machine import Machine from miasm2.core.asmblock import AsmConstraint -from miasm2.arch.x86.disasm import dis_x86_32, cb_x86_funcs def cb_x86_callpop(cur_bloc, loc_db, *args, **kwargs): @@ -45,17 +45,18 @@ shellcode = ''.join(["\xe8\x00\x00\x00\x00", # CALL $ "X", # POP EAX "\xc3", # RET ]) -bin_stream = bin_stream_str(shellcode) -mdis = dis_x86_32(bin_stream) + +# Instantiate a x86 32 bit architecture +machine = Machine("x86_32") +cont = Container.from_string(shellcode) +mdis = machine.dis_engine(cont.bin_stream, loc_db=cont.loc_db) print "Without callback:\n" asmcfg = mdis.dis_multiblock(0) print "\n".join(str(block) for block in asmcfg.blocks) # Enable callback -cb_x86_funcs.append(cb_x86_callpop) -## Other method: -## mdis.dis_block_callback = cb_x86_callpop +mdis.dis_block_callback = cb_x86_callpop print "=" * 40 print "With callback:\n" 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) diff --git a/example/symbol_exec/single_instr.py b/example/symbol_exec/single_instr.py index c78f1f7f..2de2a72e 100644 --- a/example/symbol_exec/single_instr.py +++ b/example/symbol_exec/single_instr.py @@ -1,7 +1,7 @@ # Minimalist Symbol Exec example -from miasm2.core.bin_stream import bin_stream_str -from miasm2.ir.symbexec import SymbolicExecutionEngine +from miasm2.analysis.binary import Container from miasm2.analysis.machine import Machine +from miasm2.ir.symbexec import SymbolicExecutionEngine from miasm2.core.locationdb import LocationDB START_ADDR = 0 @@ -14,8 +14,8 @@ line = machine.mn.fromstring("MOV EAX, EBX", loc_db, 32) asm = machine.mn.asm(line)[0] # Get back block -bin_stream = bin_stream_str(asm) -mdis = machine.dis_engine(bin_stream, loc_db=loc_db) +cont = Container.from_string(asm, loc_db = loc_db) +mdis = machine.dis_engine(cont.bin_stream, loc_db=loc_db) mdis.lines_wd = 1 asm_block = mdis.dis_block(START_ADDR) diff --git a/test/core/asmblock.py b/test/core/asmblock.py index cd1d262a..c3e1d11d 100644 --- a/test/core/asmblock.py +++ b/test/core/asmblock.py @@ -1,6 +1,6 @@ from pdb import pm -from miasm2.arch.x86.disasm import dis_x86_32 +from miasm2.analysis.machine import Machine from miasm2.analysis.binary import Container from miasm2.core.asmblock import AsmCFG, AsmConstraint, AsmBlock, \ AsmBlockBad, AsmConstraintTo, AsmConstraintNext, \ @@ -13,7 +13,8 @@ data = "5589e583ec10837d08007509c745fc01100000eb73837d08017709c745fc02100000eb64 cont = Container.from_string(data) # Test Disasm engine -mdis = dis_x86_32(cont.bin_stream) +machine = Machine("x86_32") +mdis = machine.dis_engine(cont.bin_stream, loc_db=cont.loc_db) ## Disassembly of one block first_block = mdis.dis_block(0) assert len(first_block.lines) == 5 @@ -215,7 +216,7 @@ asmcfg.sanity_check() # Test block_merge data2 = "31c0eb0c31c9750c31d2eb0c31ffebf831dbebf031edebfc31f6ebf031e4c3".decode("hex") cont2 = Container.from_string(data2) -mdis = dis_x86_32(cont2.bin_stream) +mdis = machine.dis_engine(cont2.bin_stream, loc_db=cont2.loc_db) ## Elements to merge asmcfg = mdis.dis_multiblock(0) ## Block alone @@ -301,7 +302,7 @@ assert asmcfg.edges2constraint[(tob.loc_key, lbl_newb)] == AsmConstraint.c_to # Check double block split data = "74097405b8020000007405b803000000b804000000c3".decode('hex') cont = Container.from_string(data) -mdis = dis_x86_32(cont.bin_stream) +mdis = machine.dis_engine(cont.bin_stream, loc_db=cont.loc_db) asmcfg = mdis.dis_multiblock(0) ## Check resulting disasm assert len(asmcfg.nodes()) == 6 |