def cmppages(self, emuop, traceop): for va, bytez in self.memcache.getDirtyPages(): tbytez = self.trace.readMemory(va, len(bytez)) diffs = e_mem.memdiff(bytez, tbytez) if diffs: diffstr = ','.join(['0x%.8x: %d' % (va+offset, size) for offset, size in diffs]) raise Exception('LockStep: emu 0x%.8x %s | trace 0x%.8x %s | DIFFS: %s' % (emuop.va, repr(emuop), traceop.va, repr(traceop), diffstr)) self.memcache.clearDirtyPages()
def cmppages(self, emuop, traceop): for va,bytez in self.memcache.getDirtyPages(): tbytez = self.trace.readMemory(va, len(bytez)) diffs = e_mem.memdiff(bytez, tbytez) if diffs: diffstr = ','.join(['0x%.8x: %d' % (va+offset,size) for offset,size in diffs ]) raise Exception('LockStep: emu 0x%.8x %s | trace 0x%.8x %s | DIFFS: %s' % (emuop.va, repr(emuop), traceop.va, repr(traceop), diffstr)) self.memcache.clearDirtyPages()
def do_memcmp(self, line): ''' Compare memory at the given locations. Outputs a set of differences showing bytes at their given offsets.... Usage: memcmp <addr_expr1> <addr_expr2> <size_expr> ''' if len(line) == 0: return self.do_help('memcmp') argv = splitargs(line) if len(argv) != 3: return self.do_help('memcmp') addr1 = self.parseExpression(argv[0]) addr2 = self.parseExpression(argv[1]) size = self.parseExpression(argv[2]) bytes1 = self.memobj.readMemory(addr1, size) bytes2 = self.memobj.readMemory(addr2, size) res = e_mem.memdiff(bytes1, bytes2) if len(res) == 0: self.vprint('No Differences!') return for offset, offsize in res: diff1 = addr1 + offset diff2 = addr2 + offset self.canvas.addText('==== %d byte difference at offset %d\n' % (offsize, offset)) self.canvas.addVaText("0x%.8x" % diff1, diff1) self.canvas.addText(":") self.canvas.addText( binascii.hexlify(bytes1[offset:offset + offsize])) self.canvas.addText('\n') self.canvas.addVaText("0x%.8x" % diff2, diff2) self.canvas.addText(":") self.canvas.addText( binascii.hexlify(bytes2[offset:offset + offsize])) self.canvas.addText('\n')
def do_memcmp(self, line): """ Compare memory at the given locations. Outputs a set of differences showing bytes at their given offsets.... Usage: memcmp <addr_expr1> <addr_expr2> <size_expr> """ if len(line) == 0: return self.do_help("memcmp") argv = splitargs(line) if len(argv) != 3: return self.do_help("memcmp") addr1 = self.parseExpression(argv[0]) addr2 = self.parseExpression(argv[1]) size = self.parseExpression(argv[2]) bytes1 = self.memobj.readMemory(addr1, size) bytes2 = self.memobj.readMemory(addr2, size) res = e_mem.memdiff(bytes1, bytes2) if len(res) == 0: self.vprint("No Differences!") return for offset, offsize in res: diff1 = addr1 + offset diff2 = addr2 + offset self.canvas.addText("==== %d byte difference at offset %d\n" % (offsize, offset)) self.canvas.addVaText("0x%.8x" % diff1, diff1) self.canvas.addText(":") self.canvas.addText(bytes1[offset : offset + offsize].encode("hex")) self.canvas.addText("\n") self.canvas.addVaText("0x%.8x" % diff2, diff2) self.canvas.addText(":") self.canvas.addText(bytes2[offset : offset + offsize].encode("hex")) self.canvas.addText("\n")