V tomto článku se ponoříme do dopadu, který má Executable and Linkable Format na současnou společnost. Od svého založení Executable and Linkable Format vyvolal neustálé diskuse a vzbudil široký zájem o různé oblasti studia. V průběhu let získal Executable and Linkable Format zvláštní význam a relevanci a ovlivnil způsob, jakým rozumíme světu kolem nás. Prostřednictvím podrobné analýzy prozkoumáme mnoho aspektů Executable and Linkable Format, jeho vývoj v čase a jeho roli při utváření naší současné reality. Tento článek se snaží nabídnout panoramatickou a obohacující vizi Executable and Linkable Format s cílem podpořit větší porozumění a uznání jeho důležitosti v současném kontextu.

Executable and Linkable Format (zkratka ELF) je v informatice standardní souborový formát pro uložení spustitelných souborů, linkovatelných objektů, dynamických (sdílených) knihoven a ladících výpisů (core dumps). ELF formát je poměrně rozšířený, v současnosti ho využívají operační systémy jako Linux, Solaris, IRIX, FreeBSD, NetBSD, OpenBSD a další. ELF formát se také objevuje u konzolí (PlayStation 2, PlayStation Portable a PlayStation 3). Formát byl původně vyvinut v Unix System Laboratories pro operační systém UNIX System V.
ELF nahradil formáty spustitelných souborů jako jsou a.out, COFF, PE, Mach-O nebo COM. Podle mnohých uživatelů ELF překonává ostatní formáty proto, že jsou buď závislé na platformě nebo jsou méně rozšiřitelné. Mimo unixové systémy je ELF použit v operačním systému OpenVMS ve verzi pro Itanium procesor nebo v systému BeOS Revision 4, kde nahrazuje PE formát (Portable Executable) na starších x86 počítačích (PPC verze zůstala při formátu Preferred Executable Format a nikdy nepoužívala PE).
Soubor ELF vždy obsahuje hlavičku, která může být následována segmenty a sekcemi. Segmenty obsahují informace nutné pro běh programového kódu. Jsou mapovány operačním systémem UN*X do virtuálního adresového prostoru pomocí systémového volání mmap(2)[1]. Sekce obsahují informace pro linker (spojování) a relokaci (přepočet adresy) objektů, které jsou umístěny v operační paměti počítače.
V případě unixového spustitelného souboru obsahuje každý segment několik sekcí. Platí, že každý bajt souboru je součástí nejvýše jedné sekce.
| Atribut | Význam |
|---|---|
| e_ident | identifikace ELF (magic number), typ architektury, verze ABI…[1] |
| e_type | typ objektového souboru[1] |
| e_machine | cílová architektura[1] |
| e_version | verze objektového souboru[2] |
| e_entry | virtuální adresa vstupního bodu programu[1] |
| e_phoff | ukazatel na pozici tabulky programů v souboru[1] |
| e_shoff | ukazatel na pozici tabulky sekcí v souboru[1] |
| e_flags | procesorové příznaky[1] |
| e_ehsize | velikost ELF hlavičky (v bajtech)[1] |
| e_phentsize | velikost záznamu v tabulce programů (v bajtech)[1] |
| e_phnum | počet záznamů v tabulce programů[1] |
| e_shentsize | velikost záznamu v tabulce sekcí (v bajtech)[1] |
| e_shnum | počet záznamů v tabulce sekcí[1] |
| e_shstrndx | odkaz na tabulku řetězců[1] |
| Atribut | Význam |
|---|---|
| p_type | typ segmentu[1] |
| p_offset | pozice 1. bajtu segmentu od počátku souboru[2] |
| p_vaddr | virtuální adresa 1. bajtu segmentu v operační paměti[2] |
| p_paddr | fyzická adresa uložení segmentu v operační paměti[1] |
| p_filesz | délka segmentu v souboru (v bajtech)[2] |
| p_memsz | velikost paměti pro daný segment (v bajtech)[2] |
| p_flags | příznaky daného segmentu[2] |
| p_align | zarovnání segmentu v operační paměti a v rámci souboru[2] |
| Typy segmentů | ||
|---|---|---|
| Atribut | Hodnota | Popis |
| PT_NULL | 0 | [1] |
| PT_LOAD | 1 | označuje segment, který bude nahrán do operační paměti[2] |
| PT_DYNAMIC | 2 | informace pro zavaděč[2] |
| PT_INTERP | 3 | cesta k interpretu programu ELF[1][2] |
| PT_NOTE | 4 | pomocné informace o programu (požadavky na OS/ABI, min. verzi jádra…)[1][2] |
| PT_SHLIB | 5 | [2] |
| PT_PHDR | 6 | pozice a velikost tabulky programů[2] |
Formát ELF nahradil některé starší spustitelné soubory v různých aplikačních prostředích. Je využíván v těchto operačních systémech:
Kromě již zmíněných herních konzolí je používán také v některých operačních systémech pro mobilní zařízení:
FatELF je rozšířením binárního formátu ELF, který umožňuje, aby spustitelný soubor obsahoval kód pro různé počítačové platformy. Kromě oddělení architektury procesoru (pořadí bajtů, velikost slova (32/64bit), instrukční sady atd.) je potenciální výhodou oddělení softwarových platforem (např. soubory, které podporují několik verzí ABI jádra pro stejnou platformu).