Esempio n. 1
0
 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()
Esempio n. 2
0
 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()
Esempio n. 3
0
    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')
Esempio n. 4
0
    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")