diff options
Diffstat (limited to 'example/disasm')
| -rw-r--r-- | example/disasm/callback.py | 20 | ||||
| -rw-r--r-- | example/disasm/dis_binary.py | 3 | ||||
| -rw-r--r-- | example/disasm/dis_binary_ir.py | 6 | ||||
| -rw-r--r-- | example/disasm/dis_binary_ira.py | 6 | ||||
| -rw-r--r-- | example/disasm/dis_x86_string.py | 5 | ||||
| -rw-r--r-- | example/disasm/full.py | 33 | ||||
| -rw-r--r-- | example/disasm/single_instr.py | 11 |
7 files changed, 49 insertions, 35 deletions
diff --git a/example/disasm/callback.py b/example/disasm/callback.py index 02416b38..95c165d4 100644 --- a/example/disasm/callback.py +++ b/example/disasm/callback.py @@ -1,3 +1,4 @@ +from __future__ import print_function from miasm2.analysis.binary import Container from miasm2.analysis.machine import Machine from miasm2.core.asmblock import AsmConstraint @@ -41,27 +42,28 @@ def cb_x86_callpop(cur_bloc, loc_db, *args, **kwargs): # Prepare a tiny shellcode -shellcode = ''.join(["\xe8\x00\x00\x00\x00", # CALL $ - "X", # POP EAX - "\xc3", # RET - ]) +shellcode = ( + b"\xe8\x00\x00\x00\x00" # CALL $ + b"X" # POP EAX + b"\xc3" # RET +) # 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" +print("Without callback:\n") asmcfg = mdis.dis_multiblock(0) -print "\n".join(str(block) for block in asmcfg.blocks) +print("\n".join(str(block) for block in asmcfg.blocks)) # Enable callback mdis.dis_block_callback = cb_x86_callpop -print "=" * 40 -print "With callback:\n" +print("=" * 40) +print("With callback:\n") asmcfg_after = mdis.dis_multiblock(0) -print "\n".join(str(block) for block in asmcfg_after.blocks) +print("\n".join(str(block) for block in asmcfg_after.blocks)) # Ensure the callback has been called assert asmcfg.loc_key_to_block(asmcfg.heads()[0]).lines[0].name == "CALL" diff --git a/example/disasm/dis_binary.py b/example/disasm/dis_binary.py index 3e12ca91..4ac5ef26 100644 --- a/example/disasm/dis_binary.py +++ b/example/disasm/dis_binary.py @@ -1,3 +1,4 @@ +from __future__ import print_function import sys from miasm2.analysis.binary import Container from miasm2.analysis.machine import Machine @@ -23,7 +24,7 @@ asmcfg = mdis.dis_multiblock(addr) # Display each basic blocks for block in asmcfg.blocks: - print block + print(block) # Output control flow graph in a dot file open('bin_cfg.dot', 'w').write(asmcfg.dot()) diff --git a/example/disasm/dis_binary_ir.py b/example/disasm/dis_binary_ir.py index 197fccfd..ac642a36 100644 --- a/example/disasm/dis_binary_ir.py +++ b/example/disasm/dis_binary_ir.py @@ -1,4 +1,6 @@ +from __future__ import print_function import sys +from future.utils import viewvalues from miasm2.analysis.binary import Container from miasm2.analysis.machine import Machine @@ -28,8 +30,8 @@ ir_arch = machine.ir(mdis.loc_db) ircfg = ir_arch.new_ircfg_from_asmcfg(asmcfg) # Display each IR basic blocks -for irblock in ircfg.blocks.values(): - print irblock +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 index 726f353e..04bddbbb 100644 --- a/example/disasm/dis_binary_ira.py +++ b/example/disasm/dis_binary_ira.py @@ -1,4 +1,6 @@ +from __future__ import print_function import sys +from future.utils import viewvalues from miasm2.analysis.binary import Container from miasm2.analysis.machine import Machine @@ -30,8 +32,8 @@ ir_arch_analysis = machine.ira(mdis.loc_db) ircfg_analysis = ir_arch_analysis.new_ircfg_from_asmcfg(asmcfg) # Display each IR basic blocks -for irblock in ircfg_analysis.blocks.values(): - print irblock +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()) diff --git a/example/disasm/dis_x86_string.py b/example/disasm/dis_x86_string.py index 8f919e4e..175e9264 100644 --- a/example/disasm/dis_x86_string.py +++ b/example/disasm/dis_x86_string.py @@ -1,8 +1,9 @@ +from __future__ import print_function from miasm2.analysis.binary import Container from miasm2.analysis.machine import Machine # The Container will provide a *bin_stream*, bytes source for the disasm engine -cont = Container.from_string("\x83\xf8\x10\x74\x07\x89\xc6\x0f\x47\xc3\xeb\x08\x89\xc8\xe8\x31\x33\x22\x11\x40\xc3") +cont = Container.from_string(b"\x83\xf8\x10\x74\x07\x89\xc6\x0f\x47\xc3\xeb\x08\x89\xc8\xe8\x31\x33\x22\x11\x40\xc3") # Instantiate a x86 32 bit architecture machine = Machine("x86_32") @@ -16,7 +17,7 @@ asmcfg = mdis.dis_multiblock(0) # Display each basic blocks for block in asmcfg.blocks: - print block + print(block) # Output control flow graph in a dot file open('str_cfg.dot', 'w').write(asmcfg.dot()) diff --git a/example/disasm/full.py b/example/disasm/full.py index 5161a299..de3f82ac 100644 --- a/example/disasm/full.py +++ b/example/disasm/full.py @@ -1,7 +1,10 @@ +from __future__ import print_function import logging from argparse import ArgumentParser from pdb import pm +from future.utils import viewitems, viewvalues + from miasm2.analysis.binary import Container from miasm2.core.asmblock import log_asmblock, AsmCFG from miasm2.core.interval import interval @@ -35,7 +38,8 @@ parser.add_argument('-n', "--funcswatchdog", default=None, type=int, help="Maximum number of function to disassemble") parser.add_argument('-r', "--recurfunctions", action="store_true", help="Disassemble founded functions") -parser.add_argument('-v', "--verbose", action="count", help="Verbose mode") +parser.add_argument('-v', "--verbose", action="count", help="Verbose mode", + default=0) parser.add_argument('-g', "--gen_ir", action="store_true", help="Compute the intermediate representation") parser.add_argument('-z', "--dis-nulstart-block", action="store_true", @@ -43,7 +47,8 @@ parser.add_argument('-z', "--dis-nulstart-block", action="store_true", parser.add_argument('-l', "--dontdis-retcall", action="store_true", help="If set, disassemble only call destinations") parser.add_argument('-s', "--simplify", action="count", - help="Apply simplifications rules (liveness, graph simplification, ...)") + help="Apply simplifications rules (liveness, graph simplification, ...)", + default=0) parser.add_argument("--base-address", default=0, type=lambda x: int(x, 0), help="Base address of the input binary") @@ -92,7 +97,7 @@ log.info("import machine...") # Use the guessed architecture or the specified one arch = args.architecture if args.architecture else cont.arch if not arch: - print "Architecture recognition fail. Please specify it in arguments" + print("Architecture recognition fail. Please specify it in arguments") exit(-1) # Instance the arch-dependent machine @@ -177,7 +182,7 @@ while not finish and todo: # Generate dotty graph all_asmcfg = AsmCFG(mdis.loc_db) -for blocks in all_funcs_blocks.values(): +for blocks in viewvalues(all_funcs_blocks): all_asmcfg += blocks @@ -189,7 +194,7 @@ log.info('generate intervals') all_lines = [] total_l = 0 -print done_interval +print(done_interval) if args.image: log.info('build img') done_interval.show() @@ -199,7 +204,7 @@ for i, j in done_interval.intervals: all_lines.sort(key=lambda x: x.offset) -open('lines.dot', 'w').write('\n'.join([str(l) for l in all_lines])) +open('lines.dot', 'w').write('\n'.join(str(l) for l in all_lines)) log.info('total lines %s' % total_l) @@ -217,7 +222,7 @@ class IRADelModCallStack(ira): for assignblk in assignblks: dct = dict(assignblk) dct = { - dst:src for (dst, src) in dct.iteritems() if dst != self.sp + dst:src for (dst, src) in viewitems(dct) if dst != self.sp } out.append(AssignBlock(dct, assignblk.instr)) return out, extra @@ -238,21 +243,21 @@ if args.gen_ir: head = list(entry_points)[0] - for ad, asmcfg in all_funcs_blocks.items(): + 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) log.info("Print blocks (without analyse)") - for label, block in ir_arch.blocks.iteritems(): - print block + for label, block in viewitems(ir_arch.blocks): + print(block) log.info("Gen Graph... %x" % ad) log.info("Print blocks (with analyse)") - for label, block in ir_arch_a.blocks.iteritems(): - print block + for label, block in viewitems(ir_arch_a.blocks): + print(block) if args.simplify > 0: log.info("Simplify...") @@ -289,7 +294,7 @@ if args.propagexpr: continue if reg in regs_todo: out[reg] = dst - return set(out.values()) + return set(viewvalues(out)) # Add dummy dependency to uncover out regs assignment for loc in ircfg_a.leaves(): @@ -317,7 +322,7 @@ if args.propagexpr: """ try: - _ = bs.getbytes(addr, size/8) + _ = bs.getbytes(addr, size // 8) except IOError: return False return True diff --git a/example/disasm/single_instr.py b/example/disasm/single_instr.py index d17e303f..70b37220 100644 --- a/example/disasm/single_instr.py +++ b/example/disasm/single_instr.py @@ -1,14 +1,15 @@ +from __future__ import print_function from miasm2.arch.x86.arch import mn_x86 from miasm2.arch.x86.regs import EDX from miasm2.core.locationdb import LocationDB loc_db = LocationDB() l = mn_x86.fromstring('MOV EAX, EBX', loc_db, 32) -print "instruction:", l -print "arg:", l.args[0] +print("instruction:", l) +print("arg:", l.args[0]) x = mn_x86.asm(l) -print x +print(x) l.args[0] = EDX y = mn_x86.asm(l) -print y -print mn_x86.dis(y[0], 32) +print(y) +print(mn_x86.dis(y[0], 32)) |