def getObjects(self, addrStart, objCount, jvm, lstList, mapList, bitmap_size_, heapBegin_): #heapBegin_ = int(heapBegin_, 16) [start, end] = art.getSE(lstList) objCount = int(objCount) [aPath, offset] = art.getOffset(addrStart, mapList) addr = open(aPath, 'rb') addr.seek(offset) #obj = int(addrStart, 16) while (objCount>0): #self.get_open_fds() try: oClass = hex(unpack_uint(addr)) if (start <= int(oClass, 16) <= end): # validating class pointer needs to edit #if (self.hasAddress(obj+offset, bitmap_size_, heapBegin_)): Validating object pointer to ensure its within heap boundary off = addr.tell()-4 address = hex(start+off) objSize = jvm.dumpRefs(oClass, addr, address, off) if (objSize%8!=0): objSize = 8*(int(objSize / 8) + (objSize % 8 > 0)) if (objSize==0): objSize =8 offset+=objSize addr.seek(offset) else: objSize=8 offset+=objSize addr.seek(offset) except: objSize=8 offset+=objSize addr.seek(offset) objCount=objCount-1 addr.close()
def printRefs(refs, lstList, mapList): [start, end] = art.getSE(lstList) if refs: for ref in refs: [aPath, offset] = art.getOffset(ref, mapList) addr = art.getFhandle(aPath) dumpRefs(ref, addr, ref, offset)
def getObjects(self, addrStart, objCount, jvm, lstList, mapList, bitmap_size_, heapBegin_): #heapBegin_ = int(heapBegin_, 16) [start, end] = art.getSE(lstList) objCount = int(objCount) [aPath, offset] = art.getOffset(addrStart, mapList) addr = art.getFhandle(aPath) addr.seek(offset) #obj = int(addrStart, 16) while (objCount > 0): oClass = hex(unpack_int(addr.read(4))[0]) if (art.validateAddr( int(oClass, 16), start, end)): # validating class pointer needs to edit #if (self.hasAddress(obj+offset, bitmap_size_, heapBegin_)): Validating object pointer to ensure its within heap boundary off = addr.tell() - 4 address = hex(start + off) objSize = jvm.dumpRefs(oClass, addr, address, off) if (objSize % 8 != 0): objSize = 8 * (int(objSize / 8) + (objSize % 8 > 0)) if (objSize == 0): objSize = 8 offset += objSize addr.seek(offset) objCount = objCount - 1 else: objSize = 8 offset += objSize addr.seek(offset) addr.close()
def getObject(self, addrStart, jvm2, lstList, mapList): [start, end] = art.getSE(lstList) [aPath, offset] = art.getOffset(addrStart, mapList) addr = art.getFhandle(aPath) addr.seek(offset) oClass = hex(struct.unpack("<I", addr.read(4))[0]) if (art.validateAddr(int(oClass, 16), start, end)): off = addr.tell() - 4 objSize = jvm2.dumpRefs(oClass, addr, off, start)
def findThreadGCRoot(refs, lstList, mapList): ref = '0x0' [start, end] = art.getSE(lstList) if refs: for ref in refs: [klass, kmonitor, refFile, refOff] = cls.getOKlass(ref, mapList) name = cls.resolveName(klass, mapList) if name == 'android.app.ActivityThread$ApplicationThread': break return ref
def printRefs(refs, lstList, mapList): [start, end] = art.getSE(lstList) if refs: for ref in refs: [klass, monitor, refFile, refOff] = cls.getOKlass(ref, mapList) name = cls.resolveName(klass, mapList) if not name in notList: #print ref [aPath, offset] = art.getOffset(ref, mapList) addr = art.getFhandle(aPath) dumpRefs(ref, addr, ref, offset)
def getObject(self, addrStart, jvm2, lstList, mapList, bitmap_size_, heapBegin_): ret =[] [start, end] = art.getSE(lstList) [aPath, offset] = art.getOffset(addrStart, mapList) addr = open(aPath, 'rb') addr.seek(offset) oClass = hex(unpack_uint(addr)) if (start <= int(oClass, 16) <= end): off = addr.tell()-4 objSize, ret = jvm2.dumpRefs(oClass, addr, off) addr.close() return ret
def getObject(self, addrStart, jvm2, lstList, mapList, bitmap_size_, heapBegin_): ret = [] [start, end] = art.getSE(lstList) [aPath, offset] = art.getOffset(addrStart, mapList) addr = art.getFhandle(aPath) addr.seek(offset) oClass = hex(unpack_int(addr.read(4))[0]) if (art.validateAddr(int(oClass, 16), start, end)): off = addr.tell() - 4 objSize, ret = jvm2.dumpRefs(oClass, addr, off) addr.close() return ret
def getObjects(self, addrStart, objCount, jvm, lstList, mapList): [start, end] = art.getSE(lstList) objCount = int(objCount) [aPath, offset] = art.getOffset(addrStart, mapList) addr = art.getFhandle(aPath) addr.seek(offset) while (objCount > 0): oClass = hex(struct.unpack("<I", addr.read(4))[0]) if (art.validateAddr(int(oClass, 16), start, end)): off = addr.tell() - 4 objSize = jvm.dumpRefs(oClass, addr, off, start) if (objSize % 8 != 0): objSize = 8 * (int(objSize / 8) + (objSize % 8 > 0)) if (objSize == 0): objSize = 8 offset += objSize addr.seek(offset) objCount = objCount - 1 else: objSize = 8 offset += objSize addr.seek(offset)