náhled|Základní schéma souborového formátu Executable and Linkable Format (ELF), používaného např. operačním systémem Linux. 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.

Nasazení 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).

Popis formátu ELF 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)POLÁČEK, Marek. Introduction to ELF [online prezentace]. Brno, 2012 [cit. 2014-04-08]. Dostupné online .. 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.

Typy souborů spustitelný soubor (ET_EXEC) – musí obsahovat segmenty objektový soubor (ET_REL, *.o) – musí obsahovat sekce, odkazuje na další objektové soubory dynamické knihovny (ET_DYN, *.so) – musí obsahovat segmenty i sekce, odkazuje na další objektové nebo spustitelné soubory soubor s výpisem ladících informací (ET_CORE) – neobsahuje segmenty ani sekce, generován při fatální chybě a selhání programu

Struktura hlavička ELF – základní informace o typu souboru, umístění dalších částí ELF souboru hlavička tabulky programů – popis dostupných segmentů hlavička tabulky sekcí – popis dostupných sekcí údaje odkazované položkami z hlavičky tabulky programů nebo sekcí

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.

ELF hlavička Atribut Význam e_ident identifikace ELF (magic number), typ architektury, verze ABI… e_type typ objektového souboru e_machine cílová architektura e_version verze objektového souboruTOOL INTERFACE STANDARD (TIS). Executable and Linking Format (ELF) Specification [online]. Version 1.2. May 1995 [cit. 2014-04-08]. Dostupné online . e_entry virtuální adresa vstupního bodu programu e_phoff ukazatel na pozici tabulky programů v souboru e_shoff ukazatel na pozici tabulky sekcí v souboru e_flags procesorové příznaky e_ehsize velikost ELF hlavičky (v bajtech) e_phentsize velikost záznamu v tabulce programů (v bajtech) e_phnum počet záznamů v tabulce programů e_shentsize velikost záznamu v tabulce sekcí (v bajtech) e_shnum počet záznamů v tabulce sekcí e_shstrndx odkaz na tabulku řetězců

Hlavička tabulky programů Atribut Význam p_type typ segmentu p_offset pozice 1. bajtu segmentu od počátku souboru p_vaddr virtuální adresa 1. bajtu segmentu v operační paměti p_paddr fyzická adresa uložení segmentu v operační paměti p_filesz délka segmentu v souboru (v bajtech) p_memsz velikost paměti pro daný segment (v bajtech) p_flags příznaky daného segmentu p_align zarovnání segmentu v operační paměti a v rámci souboru

Typy segmentů Atribut Hodnota Popis PT_NULL 0 [nevyužito] PT_LOAD 1 označuje segment, který bude nahrán do operační paměti PT_DYNAMIC 2 informace pro zavaděč PT_INTERP 3 cesta k interpretu programu ELF PT_NOTE 4 pomocné informace o programu (požadavky na OS/ABI, min. verzi jádra…) PT_SHLIB 5 [rezervováno] PT_PHDR 6 pozice a velikost tabulky programů

Nástroje readelf je Unixová binární utilita, která zobrazuje informace o jednom nebo více ELF souborech; GNU implementace pochází z GNU Binutils elfdump je příkaz v Solarisu na prohlížení informací uložených v ELF souboru objdump poskytuje široký rozsah informací o ELF souborech a jiných objektových formátech

ELF v operačních systémech 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:

Linux Solaris Irix FreeBSD NetBSD OpenBSD DragonFly BSD Syllable HP-UX BeOS Syllable Haiku

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í:

Symbian OS 9 Bada OS

FatELF 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).

Reference

Související články EXE

Externí odkazy

Kategorie:Formáty spustitelných souborů