深入理解计算机系统(第三版)第七章重要内容摘要
7.1编译器驱动程序
.c文件通过预处理器(cpp)翻译为ASCII码的中间文件.i,然后通过c编译器(cll)翻译成一个ASCII汇编文件.s,之后驱动程序通过汇编器(as)翻译成一个可重定位目标文件,最后运行链接器程序(ld)将.o以及一些必要的系统目标文件结合起来,创建一个可执行目标文件
7.2静态编译
7.3目标文件
7.4可重定位目标文件
ELF头以一个16字节的序列开始,该序列描述了生成该文件的系统的字的大小和字节顺序。
ELF头剩下的部分包含帮助链接器语法分析和解释目标文件的信息。
7.5符号和符号表
7.6符号解析
7.6.1链接器如何解析多重定义的全局符号
7.6.2与静态库链接
7.6.3链接器如何使用静态库来解析引用
不幸的是,这种算法会导致一些令人困扰的链接时错误,因为命令行上的库和目标文件的顺序非常重要
7.7重定位
7.7.1重定位条目
ELF定义了32种不同的重定位类型,以下是两种最基本的重定位类型
7.7.2重定义符号引用
1.重定位PC相对引用
2.重定位绝对引用
7.8可执行目标文件
第二个段剩下的8个字节对应于运行时将被初始化为0的.bss数据
7.9加载可执行目标文件
7.10动态链接共享库
7.11从应用程序中加载和链接共享库
7.12位置无关代码
1.PIC数据引用
2.PIC函数调用
7.13库打桩技术
7.13.1编译时打桩
7.13.2链接时打桩
7.13.3运行时打桩
7.14处理目标文件的工具