《程序员的自我修养---静态链接》第四章总结

本文深入解析链接器的工作流程,包括按序叠加与相似段合并的处理方式,以及整个链接过程的两步:空间与地址分配,和符号解析与重定位。详细解释了目标文件如何通过链接形成可执行文件,以及在Linux环境下ELF可执行文件的地址分配规则。

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

整个链接过程就是,就是将几个目标文件加工合并成一个实处文件

按序叠加:这季节将各个目标文件依次合并,但是这样会导致效率低下,导致输出文件将会有很多零散的段,因为每个段都需要有一定的地址和空间对齐的要求,段的装载地址和空间的对齐的单位是页,也就是4096字节,那么也就是说如果一个段只有1字节,他也要在内存中占用4096字节,这样会造成内存空间的大量的内部碎片在这里插入图片描述
相似段合并:将相似性质的段进行合并
在这里插入图片描述
.bss段在目标文件和可执行文件中并不占用文件的空间,但是它在装载程序占用地址空间

整体链接过程分为两步:
第一步:空间与地址分配
扫描所有的输入目标文件,获得它们的各个段的长度,属性和位置,并且将输入目标文件中的符号表中所有的符号定义和符号引用收集起来,统一放到一个全局的符号表,这一步中,链接器将能够获得所有输入目标文件的段长度,并且将他们合并,计算出输出文件中各个段合并后的长度和位置

第二步:符号解析和重定位
使用上面第一步中收集到的所有信息,读取输入文件中断的数据,重定位信息,并且进行符号解析与重定位,调整代码中的地址

在链接之前,目标文件中的所有段的VMA(virtual memory Address)都为0,因为虚拟地址空间还没有被分配
在这里插入图片描述
在Linux下,ELF可执行文件默认地址从0x08048000开始分配

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值