Mach-O Kit 是一个 C/Objective-C 框架,用于解析 OS X 和 iOS 使用的 Mach-O 二进制文件。该项目包括两个库:libMachO 和 MachOKit。
Mach-O Kit 尚未完成。目前库可以解析以下可执行文件、动态共享库和包二进制文件的这些部分:
libMachO 是一个轻量级的 C 库,用于解析内存中的 Mach-O 图像。它不应该用于解析尚未被内核/dyld 加载到内存中的二进制文件。为了保持库的轻量,libMachO 会覆盖 MachO 二进制文件并提供一组结构的 API 来解析数据。libMachO 不构建自己的独立表示,而是选择连续遍历 Mach-O 结构以访问请求数据。这意味着 libMachO 通常期望 MachO 二进制文严格适配。
Mach-O 二进制文件的目标架构与您的进程之间的差异由 libMachO 处理。Mach-O 图像数据通过内存映射和一个或多个由映射提供的内存对象来抽象访问。libMachO 包括用于访问已加载到当前进程或具有权限访问任务端口的另一个进程的 MachO 图像的内存映射。通过内存映射进行内存访问进行检查,确保不会意外访问无效内存,在格式不正确的 Mach-O 二进制文件的情况下。
libMachO 不执行任何动态内存分配。客户端负责分配由 libMachO 中的各种解析器初始化的缓冲区。因此,这些缓冲区的生命周期必须由客户端管理。
MachOKit 是一个 Objective-C 库,用于解析 Mach-O 二进制文件。它建立在 libMachO 的核心之上,但是(目前)包含一组不同的解析器。MachOKit 一次性解析 Mach-O 二进制文件中的每个部分,并构建一个由 MKNode 派生的对象图,每个对象代表 Mach-O 数据的某个部分。
与 libMachO 类似,Mach-O 二进制文件的目标架构与您的过程之间的差异由 MKMachOImage 解析 Mach-O 二进制文件时创建的对象处理。对 Mach-O 二进制文件数据的访问通过 MKMemoryMap 的一个实例进行中介,该实例验证每个内存访问都是有效的范围,并将引用的二进制文件部分映射到您的进程中。提供了 MKMemoryMap 的子类以读取磁盘上的二进制文件、当前进程中的二进制文件以及您的过程具有任务端口权限的其他进程中的二进制文件。
Mach-O Kit 在 MIT 许可下发布。请参阅 LICENSE.md。