链接(static & dynamic)
具体实现方法见《深入理解计算机系统 第三版》 仅仅整理一些思路
静态连接
连接器的任务
- 符号解析
- 重定位:汇编器生成的代码和数据节都是从地址0开始,需要将每个符号定义与一个内存位置管理,从而重定位 这些节,并修改对这些符号的引用。
三种目标文件:
- 可重定位目标文件:与其他可重定位目标文件结合,创建一个可执行文件
- 可执行目标文件
- 共享目标文件
可重定位文件格式

部分说明:
.rodata 只读数据 .symtab 符号表
.rel.text 一个.text节的位置列表,组合时需要修改
.rel.data 被模块引用或定义的所有全局变量重定位信息
符号与符号表
符号表包含该文件(m)定义和引用的符号信息
- m定义的呗其他模块引用的全局符号
- 其他模块定义被m引用的全局符号
- 只被m定义和引用的全局符号 带static的全局变量和函数
attention:不包含本地非静态的符号,这些在栈中管理
深入探讨计算机系统的链接机制

本文介绍了链接的静态和动态两种方式,详细讲解了连接器的任务、符号解析、重定位过程,以及静态库连接和动态链接的区别。在静态链接中,连接器负责处理全局符号的重定义,并将目标文件合并成可执行文件。动态链接则允许程序在运行时加载共享库,节省内存资源。重点介绍了位置无关代码(PIC)的概念和实现机制。
最低0.47元/天 解锁文章
979

被折叠的 条评论
为什么被折叠?



