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.
Prípona súboru | žiadna, .o, .so |
---|---|
Tvorca | Unix System Laboratories |
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
upraviť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
upraviť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
upraviťExterné odkazy
upraviť- 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 Archivované 2007-03-18 na Wayback Machine
- free ELF object file access library Archivované 2007-05-20 na Wayback Machine
- ELFIO: a C++ library for reading and generating files in the ELF binary format.
- How To Write Shared Libraries by Ulrich Drepper (2006-08-20)
- An unsung hero: The hardworking ELF by Peter Seebach (2005-12-20)
- LibElf and GElf — A Library to Manipulate ELF Files by Neelakanth Nadgir (August 2001)
- The ELF Object File Format by Dissection Archivované 2007-03-22 na Wayback Machine by Eric Youngdale (1995-05-01)
- A Whirlwind Tutorial on Creating Really Teensy ELF Executables for Linux by Brian Raiter
- FreeBSD Handbook — Binary formats Archivované 2013-04-03 na Wayback Machine
- Description of the ELF binary format
- elf(5) manual page
- NetBSD ELF FAQ
- Sun's Linker and Libraries Guide