from miasm2.arch.x86.arch import mn_x86 from miasm2.expression.expression import get_rw from miasm2.arch.x86.ira import ir_a_x86_32 print """ Simple expression manipulation demo. Get read/written registers for a given instruction """ arch = mn_x86 ir_arch = ir_a_x86_32() l = arch.fromstring("LODSB", 32) l.offset, l.l = 0, 15 ir_arch.add_instr(l) print "*" * 80 for lbl, b in ir_arch.blocs.items(): print b for irs in b.irs: o_r, o_w = get_rw(irs) print "read: ", [str(x) for x in o_r] print "written:", [str(x) for x in o_w] print ir_arch.gen_graph() g = ir_arch.graph() open("graph_instr.dot", "w").write(g)
from miasm2.arch.x86.arch import mn_x86 from miasm2.expression.expression import get_rw from miasm2.arch.x86.ira import ir_a_x86_32 print """ Simple expression manipulation demo. Get read/written registers for a given instruction """ arch = mn_x86 ir_arch = ir_a_x86_32() l = arch.fromstring('LODSB', 32) l.offset, l.l = 0, 15 ir_arch.add_instr(l) print '*' * 80 for lbl, b in ir_arch.blocs.items(): print b for irs in b.irs: o_r, o_w = get_rw(irs) print 'read: ', [str(x) for x in o_r] print 'written:', [str(x) for x in o_w] print open('graph_instr.dot', 'w').write(ir_arch.graph.dot())
from miasm2.arch.x86.arch import mn_x86 from miasm2.expression.expression import get_rw from miasm2.arch.x86.ira import ir_a_x86_32 print """ Simple expression manipulation demo. Get read/written registers for a given instruction """ arch = mn_x86 ir_arch = ir_a_x86_32() l = arch.fromstring('LODSB', 32) l.offset, l.l = 0, 15 ir_arch.add_instr(l) print '*' * 80 for lbl, irblock in ir_arch.blocks.items(): print irblock for assignblk in irblock: o_r, o_w = get_rw(assignblk) print 'read: ', [str(x) for x in o_r] print 'written:', [str(x) for x in o_w] print open('graph_instr.dot', 'w').write(ir_arch.graph.dot())
from miasm2.arch.x86.arch import mn_x86 from miasm2.expression.expression import get_rw CODE = raw_input('enter opcode: ').decode('hex') #instr = mn_x86.fromstring(INSTR, 32) instr = mn_x86.dis(CODE, 32) r, w = get_rw(instr.args) print "reads: %s" % ', '.join([str(x) for x in r]) print "writes: %s" % ', '.join([str(x) for x in w]) ''' for op in instr.args: print op.is_mem() ''' from miasm2.analysis.machine import Machine shellcode = open('test.bin', 'rb').read() machine = Machine('x86_32') jitter = machine.jitter(jit_type='python') jitter.init_stack() jitter.vm.add_memory_page(0x401000, 1 | 2, shellcode) jitter.jit.log_regs = True jitter.jit.log_mn = True jitter.init_run(0x401000) jitter.continue_run()