Een EXE (uitvoerbaar) bestand bevat de instructies die nodig zijn om een programma op een Windows-besturingssysteem uit te voeren. Het is niet simpelweg een lijst met opdrachten, maar een complexe structuur, waaronder:
* PE (draagbaar uitvoerbaar) koptekst: Dit is het meest cruciale onderdeel. Het biedt metagegevens over het bestand, zoals:
* Bestandshandtekening: Identificeert het als een PE-bestand.
* Architectuur: Specificeert de processor (bijvoorbeeld x86, x64, ARM).
* Ingangspunt: Het adres waar de uitvoering van het programma begint.
* Sectietabel: Een tabel die de verschillende secties binnen het bestand beschrijft.
* Tabel importeren: Geeft een overzicht van externe bibliotheken of DLL's waarvan het programma afhankelijk is.
* Tabel exporteren: (Indien van toepassing) Geeft een overzicht van de functies die het programma beschikbaar stelt aan andere programma's.
* Secties: Dit zijn blokken code en gegevens. Veel voorkomende secties zijn onder meer:
* .tekst: Bevat de machinecode-instructies van het programma.
* .gegevens: Bevat geïnitialiseerde globale en statische variabelen.
* .rdata: Bevat alleen-lezen gegevens, zoals tekenreeksconstanten.
* .bss: Bevat niet-geïnitialiseerde globale en statische variabelen (doorgaans toegewezen tijdens runtime).
* .reloc: Bevat verplaatsingsinformatie, gebruikt om adressen aan te passen wanneer het programma in het geheugen wordt geladen.
* Bronnen: Dit zijn niet-uitvoerbare gegevens zoals afbeeldingen, pictogrammen, geluiden en andere middelen die door het programma worden gebruikt.
In wezen is het EXE-bestand een pakket dat alles bevat wat het besturingssysteem nodig heeft om het programma in het geheugen te laden en uit te voeren. De lader van het besturingssysteem gebruikt de informatie in de PE-header om de verschillende secties correct in het geheugen te laden, afhankelijkheden op te lossen en de uitvoering op het aangewezen toegangspunt te starten. De code binnen de `.text` sectie wordt vervolgens uitgevoerd door de processor. |