1.目标文件的作用
编译器和汇编器创建了目标文件(包含由源程序生成的二进制代码和数据)。链接器将多个目标文件合并成一个可执行文件。
2.目标文件都有什么
一个目标文件包含五类信息。
- 头信息:关于文件的整体信息,诸如代码大小,翻译成该目标文件的源文件名称,和创建日期等。
- 目标代码:由编译器或汇编器产生的二进制指令和数据。
- 重定位信息:目标代码中的一个位置列表,链接器在修改目标代码的地址时会对它进行调整。
- 符号:该模块中定义的全局符号,以及从其它模块导入的或者由链接器定义的符号。
- 调试信息:目标代码中与链接无关但会被调试器使用到的其它信息。包括源代码文件和行号信息,本地符号,被目标代码使用的数据结构描述信息(如C语言数据结构定义)。(某些目标文件甚至包含比这更多的信息)
并不是所有的目标文件格式都包含这几类信息,一个很有用的目标文件格式很少或不包含以上任何信息,都是可能的。
3.程序与目标文件
程序源代码编译后的机器指令经常被放在代码段(Code Section)里,代码段常见的名字有“.code”或“.text”;全局变量和局部静态变量数据经常放在数据段(Data Section),数据段的一般名字都叫“.data”。让我们来看一个简单的程序被编译成目标文件后的结构,如图3-1所示。
。