标签 · 链接器脚本

3 篇文章,记录每一次探索。

[链接器的世界-实验篇11] 看穿间接层:GOT、指令松弛与静态 TLS
在 class9 的静态 PIE 上构建 GOT,实施课程支持的 mov 松弛,布局 TLS 模板,并用提供的启动代码安装主线程 TLS。
阅读全文
[链接器的世界-原理篇10] 链接器脚本:当程序需要自己安排内存
链接器脚本把输入节组织成输出映像,并约定符号地址、存储区域与入口。本文区分 ELF 文件偏移、VMA 和 LMA,解释启动代码如何完成映射、数据复制与 BSS 清零,再以 QEMU、xv6、JOS 和 ROM/RAM 布局分析地址约定失配的后果。最后讨论数据嵌入、节保留、排序、对齐与脚本断言。
阅读全文
[链接器的世界-原理篇05] 布局与 GC:给每个节找位置,让无用代码退场
同一个目标文件,用不同的链接器、不同的选项链接,填进机器码的数字都不一样。这些数字取决于布局:输入节怎么并成输出节、输出节怎么分进段、段放在哪个地址、哪些节被垃圾回收删掉。本文用 GNU ld 和 lld 的真实输出,讲清楚程序头的每个字段、文件偏移与虚拟地址为什么要同余、-z separate-code、PIE 与基址、--gc-sections 的标记过程、__start_/__stop_ 符号,以及链接器脚本和映射文件。
阅读全文