过去几天我一直在试验装配,现在了解装配和机器代码之间的关系(在OSX上通过NASM使用x86,阅读英特尔文档).
现在我试图了解链接器如何工作的细节,特别是想要了解Mach-O目标文件的结构,从Mach-O头开始.
我的问题是,你能否将下面的Mach-O标头映射到otool
命令输出(显示标题,但它们的格式不同)?
这个问题的一些原因包括:
下面我展示了我尝试从真实对象文件解码Mach-O头的示例和过程.在下面的描述中,我试图显示出现的所有小/微妙问题的提示.希望这将提供一种对新手如此混淆的感觉.
从一个名为的基本C文件开始example.c
:
#include <stdio.h>
int
main() {
printf("hello world");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
用gcc example.c -o example.out
它编译,它给出:
cffa edfe 0700 0001 0300 0080 0200 0000
1000 0000 1005 0000 8500 2000 0000 0000
1900 0000 4800 0000 5f5f 5041 4745 5a45
524f 0000 0000 0000 0000 0000 0000 0000
0000 0000 0100 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 …
Run Code Online (Sandbox Code Playgroud)