Estrarre un’immagine multi-file u-boot in Python
Inviato da Matteo Mattei ~ 25th ottobre 2011
Questo semplice pezzo di codice mostra come estrarre/decomprimere un’immagine u-boot multi-file creata con il comando mkimage, utilizzando Python. Il formato dell’immagine del file u-boot è abbastanza semplice:
64 byte per l'image header.
4 byte per la dimensione della prima immagine.
4 byte per la dimensione della seconda immagine.
...
4 byte a zero per la terminazione.
immagine1.
immagine2.
...
Dovete anche ricordarvi che ogni immagine deve essere paddata a 4 byte.
#!/usr/bin/env python
import sys
def toNumber(buf):
""" Convert string in number """
size = 0
for b in buf: size=size*256+ord(b)
return size
if len(sys.argv)!=2:
sys.stdout.write('Usage %s uboot_image_file\n' % sys.argv[0])
sys.exit(1)
f = open(sys.argv[1],'rb')
f.seek(64) # skip image header
parts = []
# get file size of all images
while True:
buf = f.read(4)
size = toNumber(buf)
if size==0: break
parts.append(size)
i = 0
for size in parts:
pattern = 'file%d.img' % i
p = open(pattern, 'wb')
buf = f.read(size)
p.write(buf)
p.close()
if size%4 != 0:
# 4 byte padding
f.read(4-(size%4))
i+=1
f.close()