Making our own executable packer
In this series, we'll attempt to understand how Linux executables are organized, how they are executed, and how to make a program that takes an executable fresh off the linker and compresses it - just because we can.
- What's in a Linux executable?
- Running an executable without exec
- Position-independent code
- ELF relocations
- The simplest shared library
- Loading multiple ELF objects
- Dynamic symbol resolution
- Dynamic linker speed and correctness
- GDB scripting and Indirect functions
- Safer memory-mapped structures
- More ELF relocations
- A no_std Rust binary
- Thread-local storage
- In the bowels of glibc
- Between libcore and libstd
- Everything but ELF
- Running a self-relocatable ELF from memory
- Fine, we'll relocate our own binary!
This series is complete.