Beispiel #1
0
class Draugr :
    def __init__(self, memory, mmap) :
        self.m = Memory(memory, "r", mmap)
        self.b = None

#        pgd = unpack("<L", self.m.read(lpid[mypid].mm + 36, 4))[0]
#        print hex(lpid[mypid].mm), hex(pgd)
#        print hex(self.m.pgd_to_pte(0xde101000)) #pgd))
#        print hex(self.m.pgd_to_pte(pgd))

    def page(self, pid, addr, size=4096) :
        if self.b == None :
            self.b = BuildTaskStruct(self.m)
            self.b.find_offsets()
        lpid = DraugrLinkedPid(self.m, self.b).runHash()
        print lpid[pid]
        pgd =  unpack("<L", self.m.read(lpid[pid].mm + 36, 4))[0]
        print hex(pgd)
        page = self.m.page(pgd, addr)
        print "PAGE @ 0x%lx" % page
        print self.m.dump(page, size, 'd')

    def lprocesses(self) :
        if self.b == None :
            self.b = BuildTaskStruct(self.m)
            self.b.find_offsets()

        lpid = DraugrLinkedPid(self.m, self.b)
        for i in lpid.run() :
            print i

    def bprocesses(self, start=0xc0000000) :
        if self.b == None :
            self.b = BuildTaskStruct(self.m)
            self.b.find_offsets()
        
        l = []
        upid = DraugrUnknownPid(self.m, self.b, start)
        for i in upid.run() :
            l.append(i)
        print

        for x in l :
            print x

    def symbol(self, name) :
        if name[0] == 'd' :
            addr = self.m.symbol(name[2:])
        elif name[0] == 'x' :
            addr = self.m.symbolXML(name[2:])
        elif name[0] == 's' :
            addr = self.m.syscall(int(name[2:]))
        else :
            raise("Ooops")

        print "%s @ 0x%lx" % (name[2:], addr)

    def disasm(self, addr, size) :
        for i in self.m.disasm(addr, size) :
            print "0x%08x (%02x) %-20s %s" % (i.offset, i.size, i.instructionHex, str(i.mnemonic) + " " + str(i.operands))

    def dump(self, addr, size) :
        print self.m.dump(addr, size, 'h')