链接
链接步骤:符号解析,同节合并,确定地址,修改引用。
7.1编译器驱动程序
7.2静态链接
链接器完成连两个主要任务,1. 符号(函数,全局变量,静态变量)解析,2. 重定位。
符号解析:编译器将定义的符号存放在一个符号表(symbol table)中,将每个符号的引用都与一个确定的符号定义建议关联。
重定位:将多个代码段和数据段合并为一个单独的代码段和数据段,计算每个定义的符号在虚拟地址空间的绝对地址,将执行文件中的符号引用处的地址修改为重定位后地址信息。
7.3目标文件
7.4可重定位目标文件
介绍了该文件格式。
7.5符号和符号表
1. 全局符号:本模块定义,其他模块引用(非static函数,非static全局变量)。
2. 外部符号:其他模块定义,本模块引用(其他模块定义的非static函数,非static全局变量)。
3. 局部符号:定义在本模块,本模块到处可以使用的独有符号(static函数,static全局变量)。
有趣的是,使用C静态属性定义的本地过程变量不会在堆栈上进行管理。 相反,编译器为这变量在.data或.bss分配每个定义的空间,并在符号表中使用唯一名称创建本地链接器符号。【COMMON 未初