Mach-O目标文件格式

1. 目标文件

 程序如果被想要跑起来,必须遵循计算机可执行文件的格式。比如linux和unix下的elf、window下的PE、macOS下的Mach-O(Mach Object File Format)。他们都是COFF格式的变种。

 我们知道编译器编译源码生成可执行文件,链接器链接各个目标文件和库文件成为可执行文件,其实目标文件和可执行文件的内容和结构很类似,因此目标文件和可执行文件采用相同的格式,即可执行文件格式。此外,动态链接库(比如linux的.so,window的.dll)和静态链接库(window的.lib和linux的.a)文件都按照可执行文件格式存储。

 macOS 支持三种可执行格式:解释器脚本格式、通用二进制格式和 Mach-O 格式。

可执行格式 magic值 用途
脚本 \x7FELF 主要用于 shell 脚本,但是也常用语其他解释器,如 Perl, AWK 等。也就是我们常见的脚本文件中在 #! 标记后的字符串,即为执行命令的指令方式,以文件的 stdin 来传递命令
通用二进制格式 0xcafebabe(32bit)/0xbebafeca(64bit) 包含多种架构支持的二进制格式,只在 macOS 上支持
Mach-O 0xfeedface(32bit)/0xfeedfacf(64bit) macOS 的原生二进制格式

2. Mach-O文件格式

3. Simple.o剖析

https://www.jianshu.com/p/175925ab3355


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!