最近更新 · 33 篇文章按系列阅读
[链接器的世界-原理篇04] 重定位:一次调用,四个字节的距离
2026-10-04
从一个真正能运行的 Linux 程序出发,追踪 call 指令里的四个字节:输入节偏移如何变成 P,CPU 为什么从下一条指令算起,S+A-P 又如何落成机器码。再逐步进入负位移、绝对指针、不同加数、溢出和链接期指令改写。
阅读全文
[链接器的世界-实验篇03] 同一个名字,谁说了算:全局符号解析
2026-10-04
先选择跨文件的全局定义,再绑定实际引用;保持局部身份、弱定义顺序和 COMMON 的大小与对齐要求,不在解析阶段分配地址。
阅读全文
[链接器的世界-原理篇03] 符号解析:同一个名字,究竟指向谁
2026-10-04
从一个能独立运行的加法程序开始,亲手制造缺失定义、重复定义和库顺序错误。沿着“谁需要、谁提供、提供者是否进入链接”理解符号解析,再讨论弱定义、common、类型检查与 C++ 的边界。
阅读全文
[链接器的世界-实验篇02] 符号与重定位记录:目标文件留下的待办事项
2026-10-04
解码符号和显式加数重定位,建立字符串表、符号表与被修补节之间的归属关系,保留后续选择与布局所需信息。
阅读全文
[链接器的世界-原理篇02] 拆开目标文件:一份等待组装的程序
2026-10-04
从一个 main.c、一个 add.c 和一份手写汇编出发,看汇编器怎样按伪指令把字节摆进各个节,再用 llvm-objdump 和几十行 Python 一个字节一个字节拆开 ELF 目标文件:ELF 头、节头表、程序头表、节的类型与标志、符号表、机器码里留下的零字节和重定位表。
阅读全文
[链接器的世界-原理篇01] 地址不能总靠手填:链接器的演化之路
2026-10-04
从 1949 年 EDSAC 的子程序库讲起,沿着"一个问题催生一个发明"的线索,看重定位、汇编器、目标文件、ELF、共享库、DWARF、.eh_frame、COMDAT、可执行栈标记和四代链接器是怎么一个接一个出现的,以及它们怎样把链接器推到今天的位置。
阅读全文