Mach-O其实是Mach Object文件格式的缩写,它是一种用于可执行文件·目标代码·动态库的文件格式。作为a.out格式的替代,Mach-O提供了更强的扩展性。
Mach-O的文件结构
Mach-O文件结构Header:包含了该二进制文件的字节顺序、架构类型、加载指令的数量等,使得其可以快速确认一些信息,比如当前文件是用于32位还是64位,对应的处理器是什么,文件类型是什么。
Header的数据结构Load commands:一张包括了区域的位置、符号表、动态符号表,引用的Framework文件就是在它的内部
Load commandsLC_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的数据结构
网友评论