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.
18 parts
- 1 What's in a Linux executable? 22 min
- 2 Running an executable without exec 22 min
- 3 Position-independent code 28 min
- 4 ELF relocations 17 min
- 5 The simplest shared library 29 min
- 6 Loading multiple ELF objects 32 min
- 7 Dynamic symbol resolution 26 min
- 8 Dynamic linker speed and correctness 28 min
- 9 GDB scripting and Indirect functions 41 min
- 10 Safer memory-mapped structures 18 min
- 11 More ELF relocations 28 min
- 12 A no_std Rust binary 27 min
- 13 Thread-local storage 42 min
- 14 In the bowels of glibc 48 min
- 15 Between libcore and libstd 35 min
- 16 Everything but ELF 26 min
- 17 Running a self-relocatable ELF from memory 27 min
- 18 Fine, we'll relocate our own binary! 37 min