可执行文件内部的秘密----小话c语言(22)
作者:陈曦
日期:2012-6-23 14:24:27
环境:[Mac 10.7.1 Lion Intel i3 支持64位指令 gcc4.2.1 xcode4.2]
转载请注明出处
Q1: 编译生成的可执行文件内部是如何被执行的?
A: 当然,首先需要知道它的结构。先编写一个简单的程序,保存为testForC.c:
Q2: Mach-O是什么?
A: 它表示mach架构下的目标文件。我们可以通过工具MachOView来查看:
由上图可以看到mach-o格式开头的基本信息,包括开头的魔数、对应CPU类型等信息。
Q3: 这些结构在哪里可以看到?
A: 在mach-o/arch.h头文件可以看到如下结构:
可以看出,它包含两种体系代码。我们同样使用MachOView工具查看它的内部信息:
可以看出,它内部包含了两种架构的信息,并且它的开头有一些特定的信息,之后才是不同架构的信息。
Q5: 上图中的Load Commands表示什么?
A: 它记录了文件中各个段(如代码段,数据段等)如何映射到内存,也包含了文件使用的动态链接器以及文件需要的动态库,同时也包含文件和动态链接器使用的符号表。Load Commands对应的结构定义如下:
对于section __text, 它对应的地址是:
由此,我们可以得到__text在文件中的真实位置为: 0x1F10 - 0x1000 = 0xF10.