程序员的自我修养(六)静态链接--符号解析与重定位

本文详细探讨了静态链接过程中的核心——符号解析与重定位。介绍了重定位表在ELF文件中的作用,如何查看目标文件的重定位信息,以及重定位入口的概念。同时,讲解了符号解析,特别是未定义符号的处理。此外,文章还分析了32位x86平台下的指令修正方式,包括绝对寻址和相对寻址,并给出了修正地址的计算公式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

符号解析与重定位是静态链接的核心内容。

重定位

重定位表

重定位表专门用来保存与重定位相关的信息,它在ELF文件中往往是一个或多个段。

  • 对于可重定位的ELF文件来说,它必须包含有重定位表,用来描述如何修改相应地段里的内容。
  • 对于每个要被重定位的ELF段都有一个对应的重定位表,而一个重定位表往往是ELF文件种的一个段,所以重定位表也被叫做重定位段

用objdump -r XXX.o查看目标文件的重定位表
在这里插入图片描述
每个要被重定位的地方叫一个重定位入口。在这里,代码段的重定位入口有6个。
RELOCATION RECORDS FOR [.txt]代表这个重定位表示代码段的重定位表。
OFFSET:重定位入口的偏移,表示该入口在要被重定位的段中的位置。对于可重定位文件来说,这个值是该重定位入口所要修正的位置的第一个字节相对于段起始的偏移;对于可执行文件或共享对象文件来说,这个值是重定位入口索要修正的位置的第一个字节的虚拟地址。

符号解析

用readelf -s XXX.o查看XXX.o的符号表
在这里插入图片描述
UND:undefined未定义类型。这种未定义的符号是因为该目标文件中有关于它的重定位项。所以在链接器扫描完所有的输入目标文件之后,所有这些未定义的符号都应该能够在全局符号表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值