
Untitled
By: a guest on
May 11th, 2012 | syntax:
None | size: 1.10 KB | hits: 16 | expires: Never
import struct
def unpack(data, offset, length, type):
return struct.unpack(type, data[offset - 0x08000000 : offset + length - 0x08000000])
f = file("nano4sdram2.bin", "rb")
data = f.read()
f.close()
head = 0x09FA1218
ptr = unpack(data, head, 4, "<I")[0]
while ptr != head:
guid = unpack(data, ptr + 8, 16, "<IHHQ")
dest = unpack(data, ptr + 24, 4, "<I")[0]
dest = unpack(data, dest + 12, 4, "<I")[0]
name = data.find(".stripped", dest - 0x08000000, dest - 0x08000000 + 0x20000)
next = data.find(".data", dest - 0x08000000, dest - 0x08000000 + 0x20000)
if name == -1 or name > next: name = "UNKNOWN"
else: name = data[data.rfind("/", name - 64, name) + 1 : name]
hdr = data.rfind(".data", dest - 0x08000000 - 0x20000, dest - 0x08000000)
prev = data.rfind(".stripped", dest - 0x08000000 - 0x20000, dest - 0x08000000)
if hdr == -1 or hdr < prev: base = 0
else: base = 0x08000000 + hdr - 0x120
print("%08X: %08X-%04X-%04X-%016X: %s (0x%08X)" % (ptr, guid[0], guid[1], guid[2], guid[3], name, dest - base))
ptr = unpack(data, ptr, 4, "<I")[0]