将bash转换为python;从内容中提取特定字节(十六进制)



我正在尝试将bash脚本转换为python,并且我有一段代码,我想更好地理解。脚本:

magic="$(readhex "$file" $end 6)" || break
test "$magic" = 070701 || test "$magic" = 070702 || break
namesize=0x$(readhex "$initramfs" $((end + 94)) 8)
filesize=0x$(readhex "$initramfs" $((end + 54)) 8)
end=$(((end + 110)))
end=$(((end + namesize + 3) & ~3))
end=$(((end + filesize + 3) & ~3))

看起来像是从文件(或内容)中读取一些十六进制数据,并获得一些属性的大小。

with open("initramfs", "rb") as f:
byte = f.read(1)
while byte != "":
byte = f.read(1)

我相信我需要使用seek,但是魔法应该代表什么不是很清楚。

Magic bytes类似于用于确定文件类型的文件签名。前6个字节070701和070702告诉读取该文件的软件它是一个CPIO归档文件,这是打包它似乎正在读取的initramfs的一种常用方法。例如,如果它是JPEG,它将是FFD8。

剩下的部分是读取地址并移动到它们。CPIO存档将有一个表,其中包含文件的地址及其元数据(名称、大小等)。编写解包归档的方法是非常重要的,除非经过彻底的测试,否则会带来潜在的安全风险。有很多现成的Python库可以用来实现这一点,它们将为您提供很好的api,用于访问各种存档格式的内容。

如果你想继续你的断言是正确的,你可以使用seek then read in to "end"字节。最神奇的部分只是测试传递给它的文件类型是否正确。

最新更新