三类目标文件
- 可重定位目标文件
-其代码和数据可和其他可重定位文件合并为可执行文件
. 每个.o文件由对应的.c文件生成
. 每个.o文件代码和数据地址都从0开始 - 可执行目标文件
-包含的代码和数据可以被直接复制到内存中并执行
-代码和数据地址为虚拟地址空间中的地址 - 共享的目标文件
-特殊的可重定位目标文件,能在装入或运行时被装入到内存并自动被链接,称为共享库文件。
目标文件的格式
- 目标代码:指编译器和汇编器处理源代码后所生成的机器语言目标代码
- 目标文件:指包含目标代码的文件
- 最早的目标文件格式是*格式,非标准的
- 标准的几种目标文件格式
- DOS操作系统(最简单):COM格式(*.com),文件中仅包含代码和数据,且被加载到内存的固定位置(不采用虚拟地址)
- System V UNIX早期版本:COFF格式,文件中不仅包含代码和数据,还包含重定位信息,调式信息,符号表等其他信息,由一组严格定义的数据结构序列组成;
- Windows: PE格式(COFF的变种),称为可移植可执行
-
Linux等类UNIX:ELF格式(COFF的变种),称为可执行可链接(Executable and Linkable Format)
链接试图——可重定位目标文件
可被链接(合并)生成可执行文件或共享目标文件
- 静态链接库文件由若干个可重定位目标文件组成
- 包含代码,数据(已初始化的全局变量和局部静态变量.data和未初始化的全局变量和局部静态变量.bss)
- 包含重定位信息(指出哪些符号引用处需要重定位)
- 文件扩展名为.o(相当于Windows中的.obj文件)
- 为了进行链接,还需要其他许多信息,如符号表,重定位信息等许多其他的节
-