第二章 编译和链接
 
1    从原代码待可执行文件
预编译,编译,汇编,静态链接
 
2     编译器
 
3    连接器
最初的代码都是程序员写在纸上,用的是机器的01码,运行时存储在纸带上,子程序和跳转的目标地址都是事先计算好的,这种人工进行的地址调整就是链接器所做的工作。当程序需要修改时,如插入或删除某些指令,各目标地址需要重新计算,该过程叫重定位。
汇编语言产生后,符号的概念被普及,用来表示变量或者符号的地址,程序员从枯燥的地址调整工作中解脱出来。
随着软件的规模增大,模块的概念被提出来。模块间的函数调用或者模块间的变量访问都是模块间的符号引用。模块间依靠符号进行通信,而模块的拼接过程就是链接。
 
4     静态链接
从原理上讲,连接器的工作无非就是把一些指令对其他符号的引用加以修正,链接过程主要包括:
地址空间分配
符号决议
重定位,地址修正的过程也叫重地位,每个要修正的地方叫重定位入口。