EXE este extensia comună pentru fișierele ce reprezintă un executabil (un program), folosită în sistemele de operareDOS, OpenVMS, Microsoft Windows, Symbian și OS/2. În afară de programele executabile, multe fișiere EXE conțin componente numite resurse, cum ar fi imagini bitmap și pictograme (iconițe) pe care programul executabil le folosește pentru interfața grafică.
Descriere
Fișierul EXE se folosește pentru sistemele de operare MS-DOS, Microsoft Windows, OpenVMS, Symbian și OS/2. Este succesorul fișierului COM, care putea atingea mărimea maximă de 64 KB și de aceea a conținut doar un segment de cod.
În afară de cod executabil, un fisier EXE poate conține și alte componente numite resurse, ca de exemplu:
executabile DOS MZ 16 biți - sunt fișierele executabile originale și pot fi identificate de prezența literelor MZ (numite număr magic) la începutul fișierului ASCII
executabile DOS 16 biți - Tip de executabile mai nou decât cele DOS MZ, care au fost introduse odată cu multitasking-ul în MS-DOS 4.0. Acest tip poate fi identificat de numărul magic NE în fișierul ASCII. Acestea nu sunt foarte populare datorită faptului ca nu pot fi rulate de alte versiuni de DOS, doar de sistemul de operareWindows pe 32 de biți și unele versiuni de OS/2.
32-bit Portable Executable - Introduse odată cu Windows NT, sunt mult mai complexe și contin PE în ASCII (însa nu la început; la început apare MZ). Poate fi rulat de orice versiune de Windows NT și chiar și de către Windows 95 și mai mult.
64-bit Portable Executable - Introduse odată cu versiunea de 64 de biți a sistemului de operare Windows. Acest tip poate fi rulat doar pe unele tipuri de procesoare: x86-64 și IA-64.
Structură unui EXE
Headerul este format din blocuri de 512 B si paragrafe de 16 B
Offset (hex)
Descriere
00-01
0x4d, 0x5a. Acesta este "numărul magic" al unui executabil.
02-03
Numărul de octeți in bloc. Dacă valoarea este 0 atunci tot blocul este ocupat (valoarea efectiva este 512)
04-05
Numărul de blocuri din executabil. Daca 02-03 este diferit de 0 atunci numai atât din ultimul bloc este ocupat.
06-07
Numărul de intrari relocate după header. Poate fi 0
08-09
Numărul de paragrafe din header.
0A-0B
Numărul de paragrafe suplimentare de care are nevoie executabilul. Aceasta este echivalentul marimii BSS din Unix
0C-0D
Numărul maxim de paragrafe aditionale.
0E-0F
Valoarea relativă a segmentului de stivă. Aceasta este adăugată degmentului la care ruleaza executabilul, și rezultatul este folosit pentru a inițializa registrul SS.
10-11
Valoarea inițială a registrului SP.
12-13
checksum-ul unui cuvânt
14-15
Valoarea inițiala a registrului IP
16-17
Valoarea inițiala a registrului CS
18-19
Offset-ul primei relocații
1A-1B
Numărul de acoperire. De obicei 0 semnificând ca este programul principal
O structură reprezentând head-erul unui executabil pe 16 biți: