Trees | Indices | Help |
---|
|
1 2 """ 3 Some tools that require the envi framework to be installed 4 """ 5 6 import sys 7 import traceback 8 9 import envi 10 import envi.archs.i386 as e_i386 # FIXME This should NOT have to be here 11 1416 for idx,name in reg_map: 17 er = emu.getRegister(idx) 18 tr = trace.getRegisterByName(name) 19 if er != tr: 20 raise RegisterException("REGISTER MISMATCH: %s 0x%.8x 0x%.8x" % (name, tr, er)) 21 return True22 23 reg_map = [ 24 (e_i386.REG_EAX, "eax"), 25 (e_i386.REG_ECX, "ecx"), 26 (e_i386.REG_EDX, "edx"), 27 (e_i386.REG_EBX, "ebx"), 28 (e_i386.REG_ESP, "esp"), 29 (e_i386.REG_EBP, "ebp"), 30 (e_i386.REG_ESI, "esi"), 31 (e_i386.REG_EDI, "edi"), 32 (e_i386.REG_EIP, "eip"), 33 (e_i386.REG_EFLAGS, "eflags") 34 ] 35 36 #FIXME intel specific 4143 """ 44 Produce an envi emulator for this tracer object. Use the trace's arch 45 info to get the emulator so this can be done on the client side of a remote 46 vtrace session. 47 """ 48 arch = trace.getMeta("Architecture") 49 amod = envi.getArchModule(arch) 50 emu = amod.getEmulator() 51 52 if trace.getMeta("Platform") == "Windows": 53 emu.setSegmentInfo(e_i386.SEG_FS, trace.getThreads()[trace.getMeta("ThreadId")], 0xffffffff) 54 55 emu.setMemoryObject(trace) 56 setRegs(emu, trace) 57 return emu5860 while True: 61 print "Lockstep: 0x%.8x" % emu.getProgramCounter() 62 try: 63 pc = emu.getProgramCounter() 64 op = emu.makeOpcode(pc) 65 trace.stepi() 66 emu.stepi() 67 cmpRegs(emu, trace) 68 except RegisterException, msg: 69 print "Lockstep Error: %s: %s" % (repr(op),msg) 70 setRegs(emu, trace) 71 sys.stdin.readline() 72 except Exception, msg: 73 traceback.print_exc() 74 print "Lockstep Error: %s" % msg 75 return76 77 import vtrace 78 import vtrace.platforms.base as v_base 7981 """ 82 Wrap an arbitrary emulator in a Tracer compatible API. 83 """13885 self.emu = emu 86 vtrace.Trace.__init__(self) 87 v_base.TracerBase.__init__(self) 88 89 # Fake out being attached 90 self.attached = True 91 self.pid = 0x56 92 93 self.setRegisterInfo(emu.getRegisterInfo())94 97 100 104106 return self.emu107109 return self.emu110 113 116 119 122 125 128 131 135140 import vtrace 141 sym = sys.argv[1] 142 pid = int(sys.argv[2]) 143 t = vtrace.getTrace() 144 t.attach(pid) 145 symaddr = t.parseExpression(sym) 146 t.addBreakpoint(vtrace.Breakpoint(symaddr)) 147 while t.getProgramCounter() != symaddr: 148 t.run() 149 snap = t.takeSnapshot() 150 #snap.saveToFile("woot.snap") # You may open in vdb to follow along 151 emu = emulatorFromTrace(snap) 152 lockStepEmulator(emu, t)153 154 if __name__ == "__main__": 155 # Copy this file out to the vtrace dir for testing and run as main 156 main() 157
Trees | Indices | Help |
---|
Generated by Epydoc 3.0.1 on Fri Nov 16 18:22:25 2012 | http://epydoc.sourceforge.net |