From e6ec952904419c73531ab62443ade23985317daf Mon Sep 17 00:00:00 2001 From: Fabrice Desclaux Date: Mon, 7 Dec 2020 17:28:54 +0100 Subject: Rename ira => LifterModelCall --- example/disasm/dis_binary_ir.py | 4 ++-- example/disasm/dis_binary_ira.py | 4 ++-- example/disasm/full.py | 25 ++++++++++++------------- 3 files changed, 16 insertions(+), 17 deletions(-) (limited to 'example/disasm') diff --git a/example/disasm/dis_binary_ir.py b/example/disasm/dis_binary_ir.py index 3facd74b..6ad69b05 100644 --- a/example/disasm/dis_binary_ir.py +++ b/example/disasm/dis_binary_ir.py @@ -25,8 +25,8 @@ asmcfg = mdis.dis_multiblock(addr) # End common section # ##################################### -# Get an IR converter -ir_arch = machine.ir(mdis.loc_db) +# Get a Lifter +ir_arch = machine.lifter(mdis.loc_db) # Get the IR of the asmcfg ircfg = ir_arch.new_ircfg_from_asmcfg(asmcfg) diff --git a/example/disasm/dis_binary_ira.py b/example/disasm/dis_binary_ira.py index bfed3497..95b3a70b 100644 --- a/example/disasm/dis_binary_ira.py +++ b/example/disasm/dis_binary_ira.py @@ -29,7 +29,7 @@ asmcfg = mdis.dis_multiblock(addr) # Get an IRA converter # The sub call are modelised by default operators # call_func_ret and call_func_stack -ir_arch_analysis = machine.ira(mdis.loc_db) +ir_arch_analysis = machine.lifter_model_call(mdis.loc_db) # Get the IR of the asmcfg ircfg_analysis = ir_arch_analysis.new_ircfg_from_asmcfg(asmcfg) @@ -39,4 +39,4 @@ for irblock in viewvalues(ircfg_analysis.blocks): print(irblock) # Output ir control flow graph in a dot file -open('bin_ira_cfg.dot', 'w').write(ircfg_analysis.dot()) +open('bin_lifter_model_call_cfg.dot', 'w').write(ircfg_analysis.dot()) diff --git a/example/disasm/full.py b/example/disasm/full.py index 47eca56d..3408e6d7 100644 --- a/example/disasm/full.py +++ b/example/disasm/full.py @@ -106,7 +106,6 @@ if not arch: # Instance the arch-dependent machine machine = Machine(arch) mn, dis_engine = machine.mn, machine.dis_engine -ira, ir = machine.ira, machine.ir log.info('ok') mdis = dis_engine(bs, loc_db=cont.loc_db) @@ -215,9 +214,9 @@ if args.propagexpr: args.gen_ir = True -class IRADelModCallStack(ira): +class LifterDelModCallStack(machine.lifter_model_call): def call_effects(self, addr, instr): - assignblks, extra = super(IRADelModCallStack, self).call_effects(addr, instr) + assignblks, extra = super(LifterDelModCallStack, self).call_effects(addr, instr) if not args.calldontmodstack: return assignblks, extra out = [] @@ -232,21 +231,21 @@ class IRADelModCallStack(ira): # Bonus, generate IR graph if args.gen_ir: - log.info("generating IR and IR analysis") + log.info("Lift and Lift with modeled calls") - ir_arch = ir(mdis.loc_db) - ir_arch_a = IRADelModCallStack(mdis.loc_db) + lifter = machine.lifter(mdis.loc_db) + lifter_model_call = LifterDelModCallStack(mdis.loc_db) - ircfg = ir_arch.new_ircfg() - ircfg_a = ir_arch.new_ircfg() + ircfg = lifter.new_ircfg() + ircfg_a = lifter.new_ircfg() head = list(entry_points)[0] for ad, asmcfg in viewitems(all_funcs_blocks): log.info("generating IR... %x" % ad) for block in asmcfg.blocks: - ir_arch.add_asmblock_to_ircfg(block, ircfg) - ir_arch_a.add_asmblock_to_ircfg(block, ircfg_a) + lifter.add_asmblock_to_ircfg(block, ircfg) + lifter_model_call.add_asmblock_to_ircfg(block, ircfg_a) log.info("Print blocks (without analyse)") for label, block in viewitems(ircfg.blocks): @@ -260,7 +259,7 @@ if args.gen_ir: if args.simplify > 0: log.info("Simplify...") - ircfg_simplifier = IRCFGSimplifierCommon(ir_arch_a) + ircfg_simplifier = IRCFGSimplifierCommon(lifter_model_call) ircfg_simplifier.simplify(ircfg_a, head) log.info("ok...") @@ -309,12 +308,12 @@ if args.propagexpr: ssa = self.do_simplify_loop(ssa, head) ircfg = self.ssa_to_unssa(ssa, head) - ircfg_simplifier = IRCFGSimplifierCommon(self.ir_arch) + ircfg_simplifier = IRCFGSimplifierCommon(self.lifter) ircfg_simplifier.deadremoval.add_expr_to_original_expr(ssa.ssa_variable_to_expr) ircfg_simplifier.simplify(ircfg, head) return ircfg head = list(entry_points)[0] - simplifier = CustomIRCFGSimplifierSSA(ir_arch_a) + simplifier = CustomIRCFGSimplifierSSA(lifter_model_call) ircfg = simplifier.simplify(ircfg_a, head) open('final.dot', 'w').write(ircfg.dot()) -- cgit 1.4.1 From 91b16391658eadd16e88c6bc20c06184e5353734 Mon Sep 17 00:00:00 2001 From: Fabrice Desclaux Date: Mon, 7 Dec 2020 17:57:21 +0100 Subject: Change example names --- example/disasm/dis_binary_ir.py | 39 -------------------------- example/disasm/dis_binary_ira.py | 42 ---------------------------- example/disasm/dis_binary_lift.py | 39 ++++++++++++++++++++++++++ example/disasm/dis_binary_lift_model_call.py | 42 ++++++++++++++++++++++++++++ test/test_all.py | 4 +-- 5 files changed, 83 insertions(+), 83 deletions(-) delete mode 100644 example/disasm/dis_binary_ir.py delete mode 100644 example/disasm/dis_binary_ira.py create mode 100644 example/disasm/dis_binary_lift.py create mode 100644 example/disasm/dis_binary_lift_model_call.py (limited to 'example/disasm') diff --git a/example/disasm/dis_binary_ir.py b/example/disasm/dis_binary_ir.py deleted file mode 100644 index 6ad69b05..00000000 --- a/example/disasm/dis_binary_ir.py +++ /dev/null @@ -1,39 +0,0 @@ -from __future__ import print_function -import sys -from future.utils import viewvalues -from miasm.analysis.binary import Container -from miasm.analysis.machine import Machine -from miasm.core.locationdb import LocationDB - -##################################### -# Common section from dis_binary.py # -##################################### - -fdesc = open(sys.argv[1], 'rb') -loc_db = LocationDB() - -cont = Container.from_stream(fdesc, loc_db) - -machine = Machine(cont.arch) - -mdis = machine.dis_engine(cont.bin_stream, loc_db=cont.loc_db) - -addr = cont.entry_point -asmcfg = mdis.dis_multiblock(addr) - -##################################### -# End common section # -##################################### - -# Get a Lifter -ir_arch = machine.lifter(mdis.loc_db) - -# Get the IR of the asmcfg -ircfg = ir_arch.new_ircfg_from_asmcfg(asmcfg) - -# Display each IR basic blocks -for irblock in viewvalues(ircfg.blocks): - print(irblock) - -# Output ir control flow graph in a dot file -open('bin_ir_cfg.dot', 'w').write(ircfg.dot()) diff --git a/example/disasm/dis_binary_ira.py b/example/disasm/dis_binary_ira.py deleted file mode 100644 index 95b3a70b..00000000 --- a/example/disasm/dis_binary_ira.py +++ /dev/null @@ -1,42 +0,0 @@ -from __future__ import print_function -import sys - -from future.utils import viewvalues -from miasm.analysis.binary import Container -from miasm.analysis.machine import Machine -from miasm.core.locationdb import LocationDB - -##################################### -# Common section from dis_binary.py # -##################################### - -fdesc = open(sys.argv[1], 'rb') -loc_db = LocationDB() - -cont = Container.from_stream(fdesc, loc_db) - -machine = Machine(cont.arch) - -mdis = machine.dis_engine(cont.bin_stream, loc_db=cont.loc_db) - -addr = cont.entry_point -asmcfg = mdis.dis_multiblock(addr) - -##################################### -# End common section # -##################################### - -# Get an IRA converter -# The sub call are modelised by default operators -# call_func_ret and call_func_stack -ir_arch_analysis = machine.lifter_model_call(mdis.loc_db) - -# Get the IR of the asmcfg -ircfg_analysis = ir_arch_analysis.new_ircfg_from_asmcfg(asmcfg) - -# Display each IR basic blocks -for irblock in viewvalues(ircfg_analysis.blocks): - print(irblock) - -# Output ir control flow graph in a dot file -open('bin_lifter_model_call_cfg.dot', 'w').write(ircfg_analysis.dot()) diff --git a/example/disasm/dis_binary_lift.py b/example/disasm/dis_binary_lift.py new file mode 100644 index 00000000..6ad69b05 --- /dev/null +++ b/example/disasm/dis_binary_lift.py @@ -0,0 +1,39 @@ +from __future__ import print_function +import sys +from future.utils import viewvalues +from miasm.analysis.binary import Container +from miasm.analysis.machine import Machine +from miasm.core.locationdb import LocationDB + +##################################### +# Common section from dis_binary.py # +##################################### + +fdesc = open(sys.argv[1], 'rb') +loc_db = LocationDB() + +cont = Container.from_stream(fdesc, loc_db) + +machine = Machine(cont.arch) + +mdis = machine.dis_engine(cont.bin_stream, loc_db=cont.loc_db) + +addr = cont.entry_point +asmcfg = mdis.dis_multiblock(addr) + +##################################### +# End common section # +##################################### + +# Get a Lifter +ir_arch = machine.lifter(mdis.loc_db) + +# Get the IR of the asmcfg +ircfg = ir_arch.new_ircfg_from_asmcfg(asmcfg) + +# Display each IR basic blocks +for irblock in viewvalues(ircfg.blocks): + print(irblock) + +# Output ir control flow graph in a dot file +open('bin_ir_cfg.dot', 'w').write(ircfg.dot()) diff --git a/example/disasm/dis_binary_lift_model_call.py b/example/disasm/dis_binary_lift_model_call.py new file mode 100644 index 00000000..95b3a70b --- /dev/null +++ b/example/disasm/dis_binary_lift_model_call.py @@ -0,0 +1,42 @@ +from __future__ import print_function +import sys + +from future.utils import viewvalues +from miasm.analysis.binary import Container +from miasm.analysis.machine import Machine +from miasm.core.locationdb import LocationDB + +##################################### +# Common section from dis_binary.py # +##################################### + +fdesc = open(sys.argv[1], 'rb') +loc_db = LocationDB() + +cont = Container.from_stream(fdesc, loc_db) + +machine = Machine(cont.arch) + +mdis = machine.dis_engine(cont.bin_stream, loc_db=cont.loc_db) + +addr = cont.entry_point +asmcfg = mdis.dis_multiblock(addr) + +##################################### +# End common section # +##################################### + +# Get an IRA converter +# The sub call are modelised by default operators +# call_func_ret and call_func_stack +ir_arch_analysis = machine.lifter_model_call(mdis.loc_db) + +# Get the IR of the asmcfg +ircfg_analysis = ir_arch_analysis.new_ircfg_from_asmcfg(asmcfg) + +# Display each IR basic blocks +for irblock in viewvalues(ircfg_analysis.blocks): + print(irblock) + +# Output ir control flow graph in a dot file +open('bin_lifter_model_call_cfg.dot', 'w').write(ircfg_analysis.dot()) diff --git a/test/test_all.py b/test/test_all.py index a8e55b2f..f0ac755e 100755 --- a/test/test_all.py +++ b/test/test_all.py @@ -600,9 +600,9 @@ for script, prods, depends in [ (["dis_x86_string.py"], ["str_cfg.dot"], []), (["dis_binary.py", Example.get_sample("test_x86_32_dis.bin"), ], ["bin_cfg.dot"], [test_x86_32_dis]), - (["dis_binary_ir.py", Example.get_sample("test_x86_32_dis.bin"), + (["dis_binary_lift.py", Example.get_sample("test_x86_32_dis.bin"), ], ["bin_ir_cfg.dot"], [test_x86_32_dis]), - (["dis_binary_lifter_model_call.py", Example.get_sample("test_x86_32_dis.bin"), + (["dis_binary_lift_model_call.py", Example.get_sample("test_x86_32_dis.bin"), ], ["bin_lifter_model_call_cfg.dot"], [test_x86_32_dis]), (["full.py", Example.get_sample("box_upx.exe")], ["graph_execflow.dot", "lines.dot"], []), -- cgit 1.4.1