Executable and Linkable Format

**Executable and Linking Format** (**ELF**, pôvodne nazývaný **Extensible Linking Format**) je spoločný štandardný súborový formát pre spúštateľné súbory, objektový kód, zdieľané knižnice a core dumpy. Prvýkrát publikovaný v špecifikácii aplikačného binárneho rozhrania System V a neskôr v Tool Interface Standard, bol rýchlo prijatý medzi rôznymi dodávateľmi Unix systémov. V roku 1999 bol zvolený ako štandardný binárny súborový formát pre Unix a systémy na báze Unixu projektom 86open.

V dnešnej dobe ELF formát nahradil formáty spúšťateľných súborov ako sú a.out a COFF v operačných systémoch Linux, Solaris, IRIX, FreeBSD, NetBSD a OpenBSD (DragonFly BSD bol odštiepený od FreeBSD po prechode na ELF). Pretože iné formáty sú proprietárne, platformovo-špecifické alebo menej rozširovateľné než ELF, tak sú niektorí užívatelia presvedčení, že ELF prekonáva ostatné formáty, iní užívatelia ho zas môžu považovať za konkurenciu ostatných formátov. ELF je tiež použitý v operačnom systéme OpenVMS nevychádzajúcom z UNIXu v jeho verzii pre Itanium procesor, rovnako aj nahrádza Portable Executable na systéme BeOS Revision 4 a neskorších pre x86 počítače (PPC verzia zostala pri formáte Preferred Executable Format a nikdy nepoužívala Portable Executable), ktorý rovnako nie je založený na UNIXe. PlayStation Portable, PlayStation 2 a PlayStation 3 konzoly taktiež používajú ELF ako ich spúštateľný súborový formát.

## Rozloženie súboru ELF

Každý ELF súbor sa skladá z jednej ELF hlavičky, nasledovanej súborovými dátami. Súborové dáta môžu obsahovať:

* Hlavičku tabuľky programu, popisujúcu nulu alebo viacero segmentov
* Hlavičku tabuľky sekcie, popisujúcu nulu alebo viacero sekcií
* Údaje odkazované položkami z hlavičky tabuľky programu alebo sekcie

Segmenty obsahujú informácie, ktoré sú nutné pre beh programového súboru a sekcie obsahujú dôležité údaje pre linkovanie a relokáciu. Každý bajt v celom súbore je zahrnutý v maximálne jednej sekcií naraz, ale v súbore sa môžu nachádzať aj bajty-siroty, ktoré nie sú pokryté žiadnou sekciou. V normálnom prípade Unixového spúšťateľného súboru je jedna alebo viac sekcií zahrnutá v jednom segmente.

## Nástroje
* `readelf` je Unixová binárna utilita, ktorá zobrazuje informácie o jednom alebo viacerých ELF súboroch. GPL implementácia je poskytnutá v GNU Binutils.
* `elfdump` je príkaz v Solarise na prezeranie informácií v ELF súbore.
* `[[objdump]]` poskytuje široký rozsah informácií o ELF súboroch a iných objektových formátoch.

## Pozri aj
* Portable Executable (PE)
* DWARF
* Mach-O

## Externé odkazy

* Tool Interface Standard (TIS) Executable and Linking Format (ELF) Specification Version 1.2 (May 1995)
* ELF for the ARM Architecture
* ELF-64 Object File Format Version 1.5 Draft 2 (May 1998)
* Elf library routines 
* free ELF object file access library 
* ELFIO: a C++ library for reading and generating files in the ELF binary format.
* *[http://people.redhat.com/drepper/dsohowto.pdf How To Write Shared Libraries] * by Ulrich Drepper (2006-08-20)
* *[http://www-128.ibm.com/developerworks/power/library/pa-spec12/ An unsung hero: The hardworking ELF]* by Peter Seebach (2005-12-20)
* *[http://developers.sun.com/solaris/articles/elf.html LibElf and GElf — A Library to Manipulate ELF Files]* by Neelakanth Nadgir (August 2001)
* *[http://www.linuxjournal.com/node/1060/print The ELF Object File Format by Dissection] * by Eric Youngdale (1995-05-01)
* *[http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html A Whirlwind Tutorial on Creating Really Teensy ELF Executables for Linux]* by Brian Raiter
* FreeBSD Handbook — Binary formats 
* Description of the ELF binary format
* elf(5) manual page
* NetBSD ELF FAQ
* Sun's Linker and Libraries Guide

Kategória:Súborové formáty