X86 反汇编/Mac OS X
外观
< X86 反汇编
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 |