Wat is ELF?

Afkorting van Executable and Linkable Format. Bestandsformaat voor objectbestanden, uitvoerbare bestanden en gedeelde bibliotheken op UNIX-achtige besturingssystemen zoals Linux en op embedded apparaten.

Japanse benaming: ELF

“ELF” komt voor in 4 oefenvragen uit 2 onderwerpen, bijv. Linker, loader en uitvoerbare formaten, Procesmaterialen (gassen, chemicaliën).

Vakgebied: Linker, loader en uitvoerbare formaten

Wat er in een ELF-bestand zit

Een bestand in Executable and Linkable Format (ELF) begint met een ELF-header die start met de magic bytes 0x7F, gevolgd door de letters E, L en F. De header legt vast of het bestand 32- of 64-bit is, de bytevolgorde, de doel-CPU, het bestandstype en het entry-pointadres waar de uitvoering begint. Hetzelfde formaat dekt relocatable objectbestanden die de compiler produceert, uitvoerbare bestanden, gedeelde bibliotheken en core dumps. Na de header volgen een program header table, de inhoud zelf en een section header table die elke sectie beschrijft.

Secties vs. segmenten

ELF biedt twee zichten op dezelfde bytes. De linker werkt met fijnmazige secties zoals .text voor code, .rodata voor constanten, .data voor geïnitialiseerde variabelen en .bss voor met nul geïnitialiseerde variabelen, die geen ruimte in het bestand inneemt en bij het laden met nullen wordt gevuld. De loader werkt met segmenten die in de program headers staan en secties groeperen op basis van rechten: .text en .rodata komen meestal in een read-execute-segment, .data en .bss in een read-write-segment. Groeperen op rechten maakt het eenvoudig om geheugenbescherming per pagina in te stellen.

Hoe ELF linken en laden ondersteunt

Objectbestanden bevatten symbooltabellen en relocatie-entries die de linker vertellen welke adressen moeten worden aangepast wanneer code en data worden samengevoegd. Dynamisch gelinkte uitvoerbare bestanden noemen in een program header een interpreter, de dynamische loader, en bevatten een dynamic-sectie met de benodigde gedeelde bibliotheken; aanroepen naar die bibliotheken lopen meestal via een procedure linkage table (PLT) en global offset table (GOT), zodat adressen tijdens runtime kunnen worden opgelost. Debuginformatie staat in extra secties die tools kunnen strippen. Embedded toolchains geven vaak ELF als uitvoer en zetten dat daarna om naar een raw binary- of hexbestand om te flashen.

ELF vs. PE en Mach-O

Linux, de BSD's en veel embedded systemen gebruiken ELF, Windows gebruikt het Portable Executable-formaat (PE) voor .exe- en .dll-bestanden, en macOS en iOS gebruiken Mach-O. De onderliggende ideeën van code- en datagebieden, symbolen, relocaties en informatie voor dynamisch linken zijn vergelijkbaar, maar de formaten verschillen, net als de systeemaanroepinterfaces en bibliotheken die de programma's verwachten. Daarom draait een gecompileerd programma niet ongewijzigd op een ander besturingssysteem, zelfs niet op dezelfde CPU.

Nu oefenen: vragen over ELF

Welke uitspraak over het ELF-formaat, dat veel op Linux wordt gebruikt, is juist?

  1. AHet is een formaat alleen voor uitvoerbare bestanden en niet voor objectbestanden
  2. BHet wordt gebruikt voor objectbestanden, uitvoerbare bestanden en gedeelde bibliotheken en bestaat uit een header en secties
  3. CHet is een formaat om afbeeldingen op te slaan
Antwoord en toelichting tonen

Antwoord: B. Het wordt gebruikt voor objectbestanden, uitvoerbare bestanden en gedeelde bibliotheken en bestaat uit een header en secties

ELF (Executable and Linkable Format) is een bestandsformaat voor programma's dat wordt gebruikt op Linux en vele andere UNIX-achtige OS'en en embedded apparaten. De ELF-header aan het begin vermeldt onder meer de doel-CPU, of het 64 bits is en het adres waar de uitvoering begint; daarna volgen secties zoals .text en .data en programmaheaders die de eenheden aangeven die de loader in het geheugen laadt. Windows gebruikt het PE-formaat en macOS Mach-O.

Wat is het juiste verschil tussen „sectie” en „segment” in een ELF-bestand?

  1. ASectie is de term voor Windows en segment die voor Linux, met dezelfde inhoud
  2. BEen sectie is de fijne eenheid die de linker behandelt, en een segment is de eenheid die de loader in het geheugen laadt en waarin secties met dezelfde rechten zijn samengevoegd
  3. CEen segment bestaat alleen op schijf en wordt niet in het geheugen geladen
Antwoord en toelichting tonen

Antwoord: B. Een sectie is de fijne eenheid die de linker behandelt, en een segment is de eenheid die de loader in het geheugen laadt en waarin secties met dezelfde rechten zijn samengevoegd

ELF kent twee gezichtspunten. De linker voert samenvoegen en relocatie uit in eenheden van fijne secties zoals .text, .rodata, .data en .bss. De loader koppelt aan het geheugen in eenheden van de segmenten uit de programmaheaders, bijvoorbeeld .text en .rodata in een segment voor lezen en uitvoeren, en .data en .bss in een segment voor lezen en schrijven. Door per recht samen te voegen, is bescherming per pagina gemakkelijk in te stellen.

Veelgestelde vragen

Waar staat ELF voor?

ELF staat voor Executable and Linkable Format, het standaard bestandsformaat voor objectbestanden, uitvoerbare bestanden en gedeelde bibliotheken op Linux en veel andere UNIX-achtige en embedded systemen.

Wat is het verschil tussen secties en segmenten in ELF?

Secties zijn fijnmazige eenheden zoals .text en .data die de linker samenvoegt en reloceert. Segmenten, beschreven door program headers, groeperen secties met dezelfde rechten tot de eenheden die de loader in het geheugen mapt.

Kan een ELF-programma op Windows draaien?

Niet native. Windows verwacht het PE-formaat en zijn eigen systeeminterfaces, dus een ELF-programma heeft een compatibiliteitslaag nodig, een virtuele machine met Linux, of hercompilatie voor Windows.

“ELF” in de toelichting

Vragen met “ELF” (4)

  1. Welke uitspraak over het ELF-formaat, dat veel op Linux wordt gebruikt, is juist?
  2. Wat is het juiste verschil tussen „sectie” en „segment” in een ELF-bestand?
  3. Welke waarde is het meest geschikt als richtwaarde voor de zuiverheid die van polykristallijn silicium (polysilicium) als grondstof voor halfgeleiders wordt gevraagd?
  4. Welke combinatie van uitvoerbare bestandsformaten die op de belangrijkste OS'en worden gebruikt, is juist?

Verwante termen

Loader Relocatie (relocation) Linker Siemens-proces Dynamisch linken ASLR BSS-sectie Dynamische linker Entry point Fragmentatie

Naar de woordenlijst