【笔记】链接

参考书籍:《深入理解计算机系统》

基本概念

加载器

加载器将可执行文件的内容映射要内存中,并运行这个程序。

链接器

链接器可以将各种代码和数据片段收集并组合成为一个单一文件,这个文件可被加载到内存并执行。

符号解析

符号解析将目标文件中的每个全局符号都绑定到一个唯一的定义。

重定位

重定位确定每个符号的最终内存地址,并修改对那些目标的引用。

位置无关代码

可以加载但无需重定位的代码称为位置无关代码。

关键点

编译器驱动程序

如图所示,源文件经过C预处理器(cpp)、C编译器(ccl)和汇编器(as)被翻译成可重定位目标文件(XXX.o),然后链接器(ld)将可重定位目标文件和一些必要的系统目标文件组合起来,创建一个可执行目标文件。

静态链接

可重定位目标文件

  • .text:已编译程序的机器代码;
  • .data:已初始化的全局和静态C变量;
  • .bss:未初始化的全局和静态C变量;以及所有被初始化为0的全局或静态变量;
  • .symtab:一个符号表,它存放在程序中定义和引用的函数和全局变量的信息;
  • .rel .text:一个.text节中位置的列表,当链接器把这个目标文件和其他文件组合时,需要修改这些位置。
  • .rel .data:被模块引用或定义的所有全局变量的重定位信息。
    ELF可重定位目标文件

可执行目标文件

  • 段头部表:将连续的文件节映射到运行时内存块;
  • 节头部表:描述目标文件的节。

ELF可执行目标文件

运行时内存映像

当加载器运行时,它创建如图所示的内存映像。
运行时内存映像

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值