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
向MachO和`macholib.MachOHeader`添加了`allow_unknown_load_commands`选项。
由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缺少describe方法
macholib 1.11
添加了对@loader_path的非常有限的黑客式支持。这仅足以处理Python二进制轮中的扩展和dylib。
macholib 1.10
#25: 添加对LC_NOTE和LC_BUILD_VERSION的支持
macholib 1.9
特性
为在代码中使用但从未定义的 macholib.mach_o.reloc_type_generic 添加了定义。
#22: 添加LICENSE文件
#23: 为“python -m macholib”添加“–help”选项
添加了函数 macholib.MachO.lc_str_value,该函数有助于解码 macholib.mach_o.lc_str 的值。这些值是加载命令数据的偏移量,该函数将返回作为字节数组的实际值。
参见问题 #21。
错误修复
拉取请求 #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.hhmi.org> 提供的补丁。
向thread_command添加字段
Asger Hautop Drewsen <asgerdrewsen@gmail.com> 提供的补丁。
添加缺失的ARM_V7S子类型。
“NN”提供的补丁。
修复SymbolTable问题
Christian Klein <chris@5711.org> 提供的补丁。
使用第一个Mach-O头作为默认头
Christian Klein <chris@5711.org> 提供的补丁。
问题 #17:将LC_LOAD_UPWARD_DYLIB添加到_RELOCATABLE集合
问题 #16:macholib在无效输入上“挂起”
由于在不受信任的输入上使用range函数,当读取无效输入并尝试构建一个巨大的列表时,python进程可能会挂起。
问题 #18:在macho_version_helper中解析版本错误
在 mach_version_helper 中的子字段顺序与现实相反。
问题 #19:修复防止代码签名的对齐问题
Brendan Simon提供的补丁。
修复问题 #14:无法将endian参数传递给p_uint64.from_str
macholib 1.7
添加了对ARM64、LC_ENCRYPTION_INFO_64和LC_LINKER_OPTION的支持
Matthias Ringwald提供的补丁。
加载命令现在有一个“describe”方法,该方法返回有关命令的更多信息。
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 使用,该函数现在有一个新的(可选)参数,用于指定加载器的路径。
还添加了对‘@loader_path’的支持,在macholib.MachoGraph中使用dyld模块中新增的‘@loader_path’支持。
由于这项支持,macho_standalone 工具现在可以重写包含 '‘@loader_path’ 加载命令的二进制文件。
macholib 1.5.2
问题 #93:在 Mach-O 标头过大无法重定位的异常消息中显示受影响的文件名。
macholib 1.5.1
由于 setup.py 中的错误,包元数据中没有 'classifiers'。
macholib 1.5
macholib 1.5 是一个小版本的功能发布
不再使用 2to3 来提供 Python 3 支持
因此,macholib 现在不再支持 Python 2.5 及更早版本。
增加了对一些新的 Mach-O 加载命令的支持
macho_standalone.py 中的 py3k 问题的修复
由 Lu Guanqun 补丁。
macho_dump.py 中一些问题的修复
由 Nam Nguyen 补丁。
问题 #10:修复了 LC_DATA_IN_CODE 链接器命令,没有此修复,py2app 无法构建 Xcode 4.5 编译的源二进制文件的应用程序包。
问题 #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 是一个小版本的功能发布
为 macholib.mach_o.CPU_TYPE_NAMES 添加了 ‘x86_64’ 和 ‘ppc64’ 字符串。
在 1.4.2 版本中,macho_find 和 macho_dump 出现了问题
添加了 ‘macholib.util.NOT_SYSTEM_FILES’,一个列表,其中包含位于系统位置但不是系统路径的文件。
需要解决 PySide (参见 py2app 追踪器中的问题 #32) 中的错误
macholib 1.4.2
macholib 1.4.2 是一个小版本的错误修复发布
在 1.4.1 中添加的新加载命令支持中包含了一个错误,该错误在 OS X 10.7 (Lion) 上引起问题。
macholib 1.4.1
macholib 1.4.1 是一个小版本的功能发布
特性
添加了对在 OS X 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_int
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 现在不再存在,因为它有一个不明确的定义,实际上在代码库中也没有使用。
错误修复
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是一个错误修复发布。
错误修复
Macholib应该与64位代码更好地工作(由Marc-Antoine Parent提供的补丁)
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分发
构建分发
macholib-1.16.3.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 07ae9e15e8e4cd9a788013d81f5908b3609aa76f9b1421bae9c4d7606ec86a30 |
|
MD5 | e1cb59e281ef2958d94e4d9546d67e63 |
|
BLAKE2b-256 | 95eeaf1a3842bdd5902ce133bd246eb7ffd4375c38642aeb5dc0ae3a0329dfa2 |
macholib-1.16.3-py2.py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0e315d7583d38b8c77e815b1ecbdbf504a8258d8b3e17b61165c6feb60d18f2c |
|
MD5 | 799e531b0597ea4d028c0672334f24ce |
|
BLAKE2b-256 | d15dc059c180c84f7962db0aeae7c3b9303ed1d73d76f2bfbc32bc231c8be314 |