CSAPP 链接实验室

CsappLinkingLab

对应 CSAPP 第 7 章「链接」。可视化静态链接全过程:符号解析→重定位→最终可执行文件。交互式观察符号表、重定位条目、强符号/弱符号规则。理解为什么「欢迎来到灰色地带」——链接器如何在多个目标文件间做出决策。

静态链接过程

CSAPP 第 7 章:链接器在「灰色地带」工作——它需要在多个目标文件间做出决策, 解析符号引用,重定位地址。点击「下一步」观察链接器的决策过程。

1
收集符号
扫描所有 .o 文件,构建全局符号表
2
符号解析
3
重定位
4
输出可执行文件
步骤 1 / 4

符号表

main.o
main
强符号0x401100
swap
未定义
buf
强符号0x601020
bufp0
强符号0x601030
swap.o
swap
强符号0x401200
buf
未定义
bufp1
强符号0x601040

链接器的符号规则

规则 1:强符号不能重复。如果两个模块都定义了同名的强符号,链接器报错。
规则 2:一个强符号 + 多个弱符号 → 选择强符号。
规则 3:多个弱符号 → 选择占用空间最大的那个(或随机选择)。

💡 核心洞察:链接器的符号规则是 C 语言中「全局变量陷阱」的根源。 多个模块定义同名全局变量不会报错,但链接器会静默选择一个—— 这就是 CSAPP 所说的「灰色地带」。

使用说明

  • •调整参数观察行为变化,实时反馈
  • •状态自动编码到 URL,可直接分享给他人
  • •支持键盘操作(Tab 切换、方向键调整)