Skip to main content

Mach-O 标头分析和编辑

项目描述

macholib 可用于分析和编辑 Mach-O 头文件,这是 Mac OS X 使用的可执行格式。

它通常用作依赖项分析工具,也用于将 Mach-O 标头中的 dylib 引用重写为相对于 @executable_path。

尽管此工具针对特定于平台的文件格式,但它是独立于平台和字节序的纯 Python 代码。

CI 状态

  • https://github.com/ronaldoussoren/macholib/workflows/Lint/badge.svg
  • https://github.com/ronaldoussoren/macholib/workflows/Test/badge.svg

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 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_findmacho_dumpmacho_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_DYLIBLC_VERSION_MIN_MACOSXLC_VERSION_MIN_IPHONEOSLC_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 的补丁)

下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

macholib-1.16.2.tar.gz (59.0 kB 查看哈希

已上传 source

内置分布

macholib-1.16.2-py2.py3-none-any.whl (38.0 kB 查看哈希

已上传 py2 py3