python - 使用 Python 解析二进制文件

标签 python binaryfiles

作为一个业余项目,我想尝试解析二进制文件(特别是 Mach-O 文件)。我知道已经存在用于此的工具 (otool),因此将其视为学习练习。

我遇到的问题是我不明白如何将找到的二进制元素转换为 python 表示形式。例如,Mach-O 文件格式以由 C 结构定义的 header 开头。第一项是 uint_32“魔数(Magic Number)”字段。当我做的时候

magic = f.read(4)

我明白了

b'\xcf\xfa\xed\xfe'

这对我来说开始有意义了。它实际上是一个 4 字节的字节数组。但是,我想将其视为代表原始魔数(Magic Number)的 4 字节 int。另一个示例是 numberOfSections 字段。我只想要由 4 字节字段表示的数字,而不是文字字节数组。

也许我在想这一切都是错误的。有人做过类似的事情吗?我是否需要编写函数来查看这些 4 字节字节数组并移位和组合它们的值以生成我想要的数字? endienness 会把我搞砸吗?任何指针都是最有帮助的。

最佳答案

看看 struct模块:

In [1]: import struct

In [2]: magic = b'\xcf\xfa\xed\xfe'

In [3]: decoded = struct.unpack('<I', magic)[0]

In [4]: hex(decoded)
Out[4]: '0xfeedfacf'

关于python - 使用 Python 解析二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7141091/

相关文章:

python - 如何将 dask 数据帧的所有部分合并在一起

python - 如何使 argparse 仅适用于一个参数,即使传递了许多参数?

python - Python中内存高效的大量numpy数组

python - 从文件中读取 16 字节 Fortran float 到 Python

java - 尝试读取对象的 ArrayList 并将其写入二进制文件,但最终在输出中得到空值

python - 导入错误 : cannot import name 'FFProbe'

python - Flask 更改服务器 header

java - 如何通过从文件中读取来反序列化 C++ 中的 ByteArray

java - 从java中的二进制文件读取Double时得到错误的值

python - 反序列化 Google Protobuf 二进制文件