MachO文件

Mach-O其实是Mach Object文件格式的缩写,它是一种用于可执行文件·目标代码·动态库的文件格式。作为a.out格式的替代,Mach-O提供了更强的扩展性。

Mach-O的文件结构

Mach-O文件结构

Header:包含了该二进制文件的字节顺序、架构类型、加载指令的数量等,使得其可以快速确认一些信息,比如当前文件是用于32位还是64位,对应的处理器是什么,文件类型是什么。


Header的数据结构



Load commands:一张包括了区域的位置、符号表、动态符号表,引用的Framework文件就是在它的内部

Load commands

LC_SEGMENT_64:将文件中(32位或64位)的段映射到进程地址空间中

LC_DYLD_INFO_ONLY:动态链接相关信息

LC_SYMTAB:符号地址

LC_DYSYMTAB:动态符号表地址

LC_LOAD_DYLINKER:使用谁加载,我们使用dyld

LC_UUID:文件的UUID

LC_VERSION_MIN_MACOSX:支持最低的操作系统版本

LC_SOURCE_VERSION:源代码版本

LC_MAIN:设置主线程的入口地址和栈大小

LC_LOAD_DYLIB:依赖库的路径,包含三方库

LC_FUNCTION_STARTS:函数起始地址表

LC_CODE_SIGNATURE:代码签名


DATA:由 Segment 段和 Section 节组成。先来说 Segment 的组成,

Segment的数据结构

Section的数据结构

你可能感兴趣的:(MachO文件)