Ejemplo n.º 1
0
	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()
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
 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()
Ejemplo n.º 4
0
 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)
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
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)
Ejemplo n.º 7
0
	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
Ejemplo n.º 8
0
 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
Ejemplo n.º 9
0
 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)