标签 · 实验
14 篇文章,记录每一次探索。
[链接器的世界-实验篇14] 接住 rustc:把链接器变成真正的驱动程序
2026-10-06
为累积的 class13 静态 PIE 后端实现命令行驱动,让 rustc 直接调用它,链接一个使用 core::fmt 的 no_std Rust 程序。
阅读全文
[链接器的世界-实验篇13] 地址也有语义:安全 ICF 与代码顺序
2026-10-06
在 class12 的 ET_EXEC 与静态 PIE 后端上实现保守 ICF 和代码顺序,重定向引用并修正折叠副本的调试信息。
阅读全文
[链接器的世界-实验篇11] 看穿间接层:GOT、指令松弛与静态 TLS
2026-10-06
在 class9 的静态 PIE 上构建 GOT,实施课程支持的 mov 松弛,布局 TLS 模板,并用提供的启动代码安装主线程 TLS。
阅读全文
[链接器的世界-实验篇10] 不再原样复制:常量合并与展开表重建
2026-10-06
在 class8 的 ET_EXEC 后端中合并重复常量,映射输入偏移,并为存活代码重建 .eh_frame 与搜索索引。
阅读全文
[链接器的世界-实验篇09] 不知道加载地址时怎么链接:自重定位的静态 PIE
2026-10-06
在 class8 前端与 class6 布局之上生成静态 PIE,区分静态补丁和加载期指针,并通过提供的启动代码完成自重定位。
阅读全文
[链接器的世界-实验篇07] 静态库按需取用:成员抽取的不动点
2026-10-06
静态库是一组目标文件的容器,而不是一个更大的目标文件。本实验解析 ar 归档格式,按未解析的全局名字逐个抽取成员,并在同一个归档内反复扫描直到不再有新成员被选中。
阅读全文
[链接器的世界-实验篇06] 文件里的字节与内存里的字节:数据、BSS 与段权限
2026-10-04
只有代码的程序几乎没有用。本实验加入只读常量、已初始化全局变量、BSS 和 COMMON,用三个权限不同的加载段描述它们,并让内核替我们检查:写只读数据、执行数据段都会收到 SIGSEGV。
阅读全文
[链接器的世界-实验篇05] 跨越文件的调用:合并代码,再填写位移
2026-10-04
上一阶段的可执行文件只能来自一个没有重定位的目标文件。本实验让汇编写的入口调用另一个文件里用 C 编译的函数:合并多个代码节,计算每个字段的 S+A-P,并保证失败时不留下半写的字节。
阅读全文
[链接器的世界-实验篇04] 第一个能运行的 ELF:两张程序头与一个入口
2026-10-04
前四个阶段只在读输入。本实验第一次写输出:规划一个最小的可执行映像,手工序列化 ELF 头和两个程序头,让 Linux 内核直接运行它并返回 42。
阅读全文
[链接器的世界-实验篇03] 同一个名字,谁说了算:全局符号解析
2026-10-04
先选择跨文件的全局定义,再绑定实际引用;保持局部身份、弱定义顺序和 COMMON 的大小与对齐要求,不在解析阶段分配地址。
阅读全文
[链接器的世界-实验篇02] 符号与重定位记录:目标文件留下的待办事项
2026-10-04
解码符号和显式加数重定位,建立字符串表、符号表与被修补节之间的归属关系,保留后续选择与布局所需信息。
阅读全文