程序员的自我修养-笔记

一、

2024-1-21

1、.bss 在目标文件、可执行文件中并不占用空间,但在装载时占用地址空间。链接器将.bss合并时,也分配虚拟空间

2、链接器为目标文件分配地址和空间,.test、.data在可执行文件及装载后的虚拟地址中均占空间;.bss仅在虚拟地址空间中。

3、链接分两步:

  • 空间与地址分配:获取各个.o各个段的长度、属性、位置;收集各个.o中的符号定义、符号引用,统一放到全局符号表。计算合并后的各个段长度与位置,并建立映射关系
  • 符号解析与重定位:利用第一步的信息,读取各个.o中段的数据,重定位信息。进行符号解析给予重定位,调整代码中的地址。查找全局符号表,找到符号,然后重定位。

4、链接之前,.o的VMA都是0,因为虚拟空间还没有分配。链接之后,可执行文件各个段就分到相应的虚拟地址。(涉及操作系统进行虚拟地址空间分配规则)。链接器在完成地址、空间分配之后,就可以确定所有符号的虚拟地址了,然后就可以对需要重定位的进行地址修正了。

5、可重定位的ELF文件一定有重定位表。代码引用了外部代码、符号,对应.o“.rel.text”代码段的重定位表,“.rel.data”数据段的重定位表。重定位入口 + 偏移就能找到。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值