See through your binaries. Explore hex dumps, struct layouts, memory maps, and dynamic linking — interactively.
./hello
Every step is a doorway into a deeper concept. Click to explore.
$ ./hello
You type a command in your shell
execve()
The shell calls execve — the kernel takes over
Read ELF Header
The kernel reads the first 64 bytes: magic number, type, architecture
Parse Program Headers
Segments tell the kernel what to map into memory and where
Map Memory
PT_LOAD segments are mapped at their virtual addresses with correct permissions
Dynamic Linker
If PT_INTERP exists, ld-linux.so resolves shared library symbols
Jump to Entry
CPU starts executing at e_entry — your program runs