Executable and Linkable Format (ELF)
Every compiled binary on Linux is ELF. Understanding ELF is essential for debugging, reverse engineering, dynamic linking, build toolchains, binary patching, and tools like readelf, objdump, ldd, and patchelf.
What It Defines
Defines the binary format for executable files, shared objects (.so/.dylib), relocatable objects (.o), and core dumps on Unix/Linux systems. Specifies the ELF header, program headers (segments for OS loading), section headers (for linking: .text, .data, .bss, .rodata), dynamic linking tables (DT_NEEDED, PLT, GOT), symbol tables, relocation entries (RELA/REL), and versioned symbol support. The standard binary format on Linux, FreeBSD, Android, and most embedded systems.
Canonical (Normative)
Convenient (Practical)
Related References
Non-profit hosting Linux kernel development and hundreds of open-source projects. Maintains the Linux Standard Base (LSB) for binary-compatible Linux distributions, hosts the ELF reference specifications and System V ABI documents, and stewards ELISA, OpenEmbedded, Zephyr, and other embedded/safety-critical Linux initiatives.
Related Specs
Every C/C++/Rust/Go/Swift program on x86-64 Linux follows this ABI. Understanding it is essential for FFI bindings, inline assembly, debugger step-over logic, and compiler backend development.
Every function call on AArch64 (Apple Silicon, Android arm64, AWS Graviton) follows AAPCS64. Required for correct assembly, FFI bindings from any language, and compiler backend targeting Arm64.
Required for writing RISC-V assembly, setting up cross-compilation toolchains, or building compilers and OSes targeting RISC-V.
POSIX defines the lingua franca of Unix/Linux systems programming. Every system call pattern, signal handler, file descriptor idiom, and shell script convention in the Linux/macOS world comes from this spec.
Every debugger, profiler, crash reporter, and sanitizer on Linux/macOS reads DWARF. Understanding it is critical for improving build-time debug quality, diagnosing toolchain issues, and building custom binary analysis tools.