Přeskočit na obsah

Executable and Linkable Format

Z Wikipedie, otevřené encyklopedie

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) knihovenladí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 PortablePlayStation 3). Formát byl původně vyvinut v Unix System Laboratories pro operační systém UNIX System V.

Nasazení

V současnosti formát 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é než ELF. 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).

Typy ELF souborů

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

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 a 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. Jednotlivé segmenty a sekce jsou uvedeny v tabulce hlavičky ELF souboru.

Každý ELF soubor se skládá z ELF hlavičky, která je následována souborovými daty. Součástí souborových dat může být:

  • hlavička tabulky programu – popis dostupných segmentů
  • hlavička tabulky sekce – popis dostupných sekcí
  • údaje odkazované položkami z hlavičky tabulky programu nebo sekce

Každý byte z celého souboru je součástí nejvýše jedné sekce. V typickém případě unixového spustitelného souboru je jedna nebo více sekcí zahrnutá právě v jednom segmentu.

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:

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

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í bytů, 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

  1. a b c d e POLÁČEK, Marek. Introduction to ELF [online prezentace]. Brno, 2012. Dostupné z: http://people.redhat.com/mpolacek/src/devconf2012.pdf.

Související články