解析静态链接
文章目录
- 静态链接
-
- 空间与地址分配
-
- 相似段合并
- 虚拟地址分配
- 符号地址确定
- 符号解析与重定位
- 链接器优化
-
- 重复代码消除
- 函数链接级别
- 静态库
- 静态链接优缺点
静态链接
一组目标文件经过链接器链接后形成的文件即可执行文件,如果没有动态库的加入,那么这个可执行文件被加载后无需再进行重定位操作(符号已经在链接阶段全部得到重定位),这种方式即静态链接,静态链接的过程分为空间与地址分配+符号解析与重定位
空间与地址分配
空间与地址分配阶段链接器需要为各个节分配虚拟地址,分配虚拟地址的第一步就是要把各个目标文件的节进行合并,现代链接器都是采用相似段合并的方式对目标文件的节进行合并,所谓相似节合并,即多个目标文件的代码节合一起,数据节合一起…
相似段合并
链接器扫描所有目标文件各个节的信息,获取其长度,对相似节进行合并,合并完后的节在代码段中称为段。实际上ELF文件中既能称作节(section),也能称作段(segment),但是可执行文件中一般都是称为段,并且有个更专业的术语称为执行视图,而目标文件中的节称为链接视图
虚拟地址分配
//a.c
extern int shared;
int main(){
int a=0;</