Latest posts · 33 articlesBrowse series
[The World of Linkers—Theory 04] Relocation: Four Bytes Between Caller and Callee
2026-10-04
Follow a runnable Linux program from an unresolved call to four final instruction bytes. Distinguish section offsets, file offsets, P, and next RIP before deriving S+A-P; then explore negative displacements, absolute pointers, addends, overflow, and instruction relaxation.
Read article
[The World of Linkers—Lab 03] Who Owns the Name? Global Symbol Resolution
2026-10-04
Select global definitions before binding used references, preserving local identity, weak tie order, and COMMON requirements without assigning addresses.
Read article
[The World of Linkers—Theory 03] One Name, Several Definitions: Who Wins?
2026-10-04
Start with a runnable two-file program, then change only the link inputs to expose missing definitions, duplicate definitions, weak symbols, common storage, archive extraction, and the limits of ordinary type checking.
Read article
[The World of Linkers—Lab 02] Symbols and Relocations: An Object File's Unfinished Business
2026-10-04
Decode symbols and explicit-addend relocations, establish table ownership, and preserve information for definition selection and layout.
Read article
[The World of Linkers—Theory 02] An Object File Is a Program with Unfinished Business
2026-10-04
Follow C through assembly into ELF, decode the actual bytes of sections and symbols, and identify the promises a relocation record leaves for the linker. All examples use a native x86-64 Linux toolchain.
Read article
[The World of Linkers—Lab 01] Sections and Names: Carving Bytes into Regions
2026-10-04
Decode section descriptors, borrow payload bytes, and resolve names so later stages consume named Sections instead of rereading raw fields.
Read article
[The World of Linkers—Theory 01] The Long Road from Names to Addresses
2026-10-04
A linker began as a way to move reusable code. Follow the problems that led to object files, shared libraries, unwind tables, security metadata, and modern parallel linkers—then link a small program by hand.
Read article
[The World of Linkers—Lab 00] Distrust the Input: The ELF Boundary
2026-10-04
Check byte ranges, the supported ELF64 header, and section-header indexes to establish an input boundary without arithmetic wraparound or out-of-bounds reads.
Read article