跳转到内容

X86 反汇编/Mac OS X

来自维基教科书,开放的书籍,开放的世界

Mach-O 格式概述

[编辑 | 编辑源代码]

MacOS(以前称为 OS X)使用 Mach-O 文件格式来编码可执行文件、目标文件和共享库(.dylib 文件)。在这里,我们将关注 Mach-O 格式的 64 位版本。Mach-O 文件中的大部分数据是“段”和“节”,其中段是节的容器,存储有关每个节的信息。节本身是数据的容器。Mach-O 文件有五个主要结构

结构 描述
头部 包含有关文件结构的用途和大小的信息
加载命令 所有段和节的声明
数据 文件的实际内容(例如,数据节、文本节)。
符号表 指示每个符号在文件中的位置
字符串表 包含每个符号的名称

请注意,每个结构都是一个完整的字节序列,它们之间没有空隙。

头部是文件的第一部分,它包含 8 个无符号 32 位整数

名称 用途 字节序 典型值
魔数 文件的魔数 大端序 64 位架构为 0xFEEDFACF
CPU 类型 可执行文件的目标 CPU 类型 小端序 x86_64 为 0x01000007
CPU 子类型 使用的特定 CPU 类型 小端序 所有 x64 CPU 为 0x00000003
文件类型 文件用途 小端序 目标文件为 0x00000001,可执行文件为 0x00000002
加载命令数量 加载命令的数量(不包括节头部) 小端序 变量
加载命令大小 加载命令占用的字节数 小端序 变量
标志 额外的文件信息 小端序 0x00000000
保留 无实际用途 小端序 0x00000000
华夏公益教科书