Mach-O 标头分析和编辑
项目描述
macholib 可用于分析和编辑 Mach-O 头文件,这是 Mac OS X 使用的可执行格式。
它通常用作依赖项分析工具,也用于将 Mach-O 标头中的 dylib 引用重写为相对于 @executable_path。
尽管此工具针对特定于平台的文件格式,但它是独立于平台和字节序的纯 Python 代码。
CI 状态
项目链接
发布历史
macholib 1.16.2
更新 Python 3.11 的分类器
macholib 1.16.1
添加了一些新的 CPU 子类型定义
macholib 1.16
将allow_unknown_load_commands选项添加到MachO和 `macholib.MachOHeader。
github 用户 bhamiltoncx 的 PR。
macholib 1.15.2
在项目元数据中明确提及 Python 3.10
macholib 1.15.1
删除先前版本中引入的调试打印。
macholib 1.15
在 macOS 11 SDK 中添加对新功能的支持
修复 README.rst 中存储库的链接
修复macOS 11 或更高版本系统库的macholib.dyld.dyld_find
macholib 1.14
存储库移至 GitHub
#32:更新 LC_NAMES 表
macholib 1.13
# 31: 添加 macOS 10.15 中引入的两个新加载命令
macholib 1.12
#27: build_version_command 缺少描述方法
macholib 1.11
为@loader_path 添加非常hacky 有限的支持。这足以处理 Python 二进制轮子中的扩展和 dylib。
macholib 1.10
#25:添加对 LC_NOTE 和 LC_BUILD_VERSION 的支持
macholib 1.9
特征:
添加macholib.mach_o.reloc_type_generic的定义,该定义在代码中使用但从未定义。
#22: 添加许可证文件
#23:为“python -m macholib”添加了“–help”选项
添加了函数macholib.MachO.lc_str_value应该有助于解码macholib.mach_o.lc_str的值。这些值是加载命令数据中的偏移量,该函数将实际值作为字节字符串返回。
另见问题#21。
Bug修复:
拉取请求 #15:修复 thread_command 类中的拼写错误
用户“phdphuc”在 bitbucket 上打补丁。
macholib 1.8
使用与 otool 相同的依赖遍历逻辑
Taras Tsugrii < ttsugrii @ fb的补丁。com >
添加了对新加载命令的支持
David Dorsey < trogdorsey @ gmail的补丁。com >,由 Ronald Oussoren 进行了改进。
修复从 XCODE 6.x 处理 DSYM 文件
HolmsBlazhey < andrey的补丁。blazhey @ gmail 。com >
MachOGraph.locate():调用 dyld_find() 时,使用 kwarg 'loader_path',而不是 'loader'。
Stuart Berg < bergs @ janelia的补丁。嗯。组织>
向 thread_command 添加字段
Asger Hautop Drewsen 的补丁 < asgerdrewsen @ gmail 。com >
添加缺少的 ARM_V7S 子类型。
“NN”补丁
修复符号表
Christian Klein < chris @ 5711的补丁。组织>
使用第一个 Mach-O 标头作为默认标头
Christian Klein < chris @ 5711的补丁。组织>
问题 #17:将 LC_LOAD_UPWARD_DYLIB 添加到 _RELOCATABLE 集
问题 #16:macholib 在无效输入时“挂起”
由于在不受信任的输入上使用 range 函数,python 进程在读取无效输入时可能会挂起,因为试图构建一个巨大的列表。
问题 #18:macho_version_helper 中的错误版本解析
mach_version_helper 中子字段的顺序与现实相反。
问题 #19:修复阻止代码签名的对齐问题
布伦丹·西蒙的补丁
修复问题 #14:无法将字节序参数传递给 p_uint64.from_str
macholib 1.7
添加了对 ARM64、LC_ENCRYPTION_INFO_64 和 LC_LINKER_OPTION 的支持
Matthias Ringwald 的补丁。
加载命令现在有一个“描述”方法,可以返回有关命令的更多信息。
David Dorsey 的补丁。
标头中的 MAGIC 值始终以本机字节顺序表示,而不是从二进制文件中读取的值。
David Dorsey 的补丁。
在“macholib.mach_o”中添加了各种新常量。
David Dorsey 的补丁。
macholib 1.6.1
?
macholib 1.6
在macholib.dyld中添加对“ @loader_path ”链接命令的支持:
添加了函数macholib.dyld.dyld_loader_search
此函数由macholib.dyld.dyld_find使用,该函数现在有一个新的(可选)参数,其中包含加载程序的路径。
还使用dyld 模块中新添加的“ @loader_path ”支持将“ @loader_path ”支持添加到macholib.MachoGraph 。
由于此支持, macho_standalone工具现在可以重写包含“ @loader_path ”加载命令的二进制文件。
macholib 1.5.2
问题 #93:在 Mach-O 标头太大而无法重新定位的异常消息中显示受影响文件的名称。
macholib 1.5.1
由于 setup.py 中的错误,包元数据中没有“分类器”。
macholib 1.5
macholib 1.5 是一个次要功能版本
不再使用 2to3 提供 Python 3 支持
作为这个 macholib 的副作用,它不再支持 Python 2.5 和更早版本。
添加对一些新的男子气概加载命令的支持
修复 macho_standalone.py 中的 py3k 问题
陆冠群的补丁。
修复 macho_dump.py 中的一些问题
Nam Nguyen 的补丁
问题 #10:修复 LC_DATA_IN_CODE 链接器命令,如果没有此修复,当源二进制文件使用 Xcode 4.5 编译时,py2app 无法构建应用程序包。
问题 #6:修复 LC_ENCRYPTION_INFO 链接器命令
使用 mach 头信息来打印二进制文件的 cpu 类型,而不是试图从指针宽度和字节序中推断出来。
由于问题 #6 更改了代码,其中用户尝试转储 iOS 二进制文件,这会导致先前版本中的虚假输出。
映射macholib.macho_dump.ARCH_MAP未记录,macholib 本身不再使用。它将在下一个版本中删除。
命令行工具macho_find、macho_dump和 macho_standalone已弃用。请改用“python -mmacholib”。那是:
$ python -mmacholib dump /usr/bin/grep $ python -mmacholib find ~ $ python -mmacholib standalone myapp.app
这样可以更清楚地使用哪个版本的工具。
macholib 1.4.3
macholib 1.4.3 是一个次要功能版本
将“x86_64”和“ppc64”的字符串添加到 macholib.mach_o.CPU_TYPE_NAMES。
macho_find 和 macho_dump 在 1.4.2 版本中被破坏
添加了“macholib.util.NOT_SYSTEM_FILES”,即不是系统路径的文件列表,即使它们位于系统位置。
需要解决 PySide 中的错误(请参阅 py2app 跟踪器中的问题 #32)
macholib 1.4.2
macholib 1.4.2 是一个小错误修复版本
对 1.4.1 中添加的新加载命令的支持包含一个导致 OSX 10.7 (Lion) 出现问题的错字。
macholib 1.4.1
macholib 1.4.1 是次要功能版本
特征:
添加对在 OSX 10.6 生命周期中添加的许多新 MachO 加载命令的支持:LC_LOAD_UPWARD_DYLIB、 LC_VERSION_MIN_MACOSX、LC_VERSION_MIN_IPHONEOS和 LC_FUNCTION_STARTS。
macholib 1.4
macholib 1.4 是一个功能版本
特征:
现在使用sphinx生成文档 ,可以在 < http://packages.python.org/macholib > 查看。
存储库已移至 bitbucket
现在有一个测试套件
模块内的私有功能被重命名为以下划线开头的名称。
macholib.ptypes中的基本可打包类型已重命名以更好地表示相应的 C 类型。下表列出了旧名称和新名称(旧名称仍然可用,但已弃用,将在未来版本中删除)。
旧名
新名字
p_byte
p_int8
p_ubyte
p_uint8
p_short
p_int16
p_ushort
p_uint16
品脱
p_int32
p_uint
p_uint32
p_long
p_int32
p_ulong
p_uint32
p_longlong
p_int64
p_ulonglong
p_uint64
Macholib.ptypes.p_ptr不再存在,因为它的定义不明确并且实际上并未在代码库中使用。
Bug修复:
dyld.dyld_default_search的语义有所改变,它现在首先搜索框架路径(如果合适),然后搜索链接器路径,而与DYLD_FALLBACK* 环境变量的值无关。
以前的版本会在设置这些变量时更改搜索顺序,这很奇怪,并且与系统 dyld 的记录行为不对应。
再次可以使用python2.5安装
源代码分发包括所有文件,由于切换到 mercurial(这混淆了 setuptools),这被破坏了
macholib 1.3
macholib 1.3 是一个功能版本。
特征:
实验性 Python 3.x 支持
此版本包含对 Python 3 的简单测试支持。
macholib 1.2.2
macholib 1.2.2 是一个错误修复版本。
Bug修复:
Macholib 应该更好地使用 64 位代码(Marc-Antoine Parent 的补丁)
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。