Sari la conținut

EXE

De la Wikipedia, enciclopedia liberă
Extensia.exe al programului preinstalat "cmd"

EXEeste extensia comună pentru fișierele ce reprezintă unexecutabil(unprogram), folosită însistemele de operareDOS,OpenVMS,Microsoft Windows,SymbianșiOS/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 pentruinterfața grafică.

FișierulEXEse folosește pentru sistemele de operareMS-DOS,Microsoft Windows,OpenVMS,SymbianșiOS/2.Este succesorul fișieruluiCOM,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 numiteresurse,ca de exemplu:

Tipuri de executabile

[modificare|modificare sursă]

Există câteva tipuri de formate de fișiere EXE

  • executabileDOS MZ16 biți - sunt fișierele executabile originale și pot fi identificate de prezența literelorMZ(numite număr magic) la începutul fișieruluiASCII
  • executabileDOS16 biți - Tip de executabile mai nou decât cele DOS MZ, care au fost introduse odată cumultitasking-ulînMS-DOS 4.0.Acest tip poate fi identificat de numărul magicNEîn fișierulASCII.Acestea nu sunt foarte populare datorită faptului ca nu pot fi rulate de alte versiuni deDOS,doar desistemul de operareWindowspe 32 de biți și unele versiuni deOS/2.
  • 32-bit Linear Executable - Introduse înOS/22.0 și compatibil cu orice altă versiune mai mare ce poate fi identificate deLXînASCII.
  • Mixed 16/32-bit Linear Executable - Introduse înOS/22.0 și se pot identifica prinLEînASCII.Acest tip nu mai este folosit.
  • 32-bit Portable Executable - Introduse odată cuWindows NT,sunt mult mai complexe și continPEînASCII(însa nu la început; la început apareMZ). Poate fi rulat de orice versiune deWindows NTși chiar și de cătreWindows 95și mai mult.
  • 64-bit Portable Executable - Introduse odată cu versiunea de 64 de biți a sistemului de operareWindows.Acest tip poate fi rulat doar pe unele tipuri deprocesoare:x86-64șiIA-64.

Structură unui EXE

[modificare|modificare sursă]

Headerul este format din blocuri de 512 B siparagrafede 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 este512)
04-05 Numărul de blocuri din executabil. Daca02-03este diferit de 0 atunci numai atât din ultimul bloc este ocupat.
06-07 Numărul de intrari relocate dupăheader.Poate fi0
08-09 Numărul deparagrafedinheader.
0A-0B Numărul deparagrafesuplimentare de care are nevoie executabilul. Aceasta este echivalentul marimii BSS dinUnix
0C-0D Numărul maxim deparagrafeaditionale.
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 registrulSS.
10-11 Valoarea inițială a registruluiSP.
12-13 checksum-ul unui cuvânt
14-15 Valoarea inițiala a registruluiIP
16-17 Valoarea inițiala a registruluiCS
18-19 Offset-ul primei relocații
1A-1B Numărul deacoperire.De obicei0semnificând ca este programul principal

O structură reprezentând head-erul unui executabil pe 16 biți:

structEXE{
unsignedshortsignature;/* == 0x5a4D */
unsignedshortbytes_in_last_block;
unsignedshortblocks_in_file;
unsignedshortnum_relocs;
unsignedshortheader_paragraphs;
unsignedshortmin_extra_paragraphs;
unsignedshortmax_extra_paragraphs;
unsignedshortss;
unsignedshortsp;
unsignedshortchecksum;
unsignedshortip;
unsignedshortcs;
unsignedshortreloc_table_offset;
unsignedshortoverlay_number;
};

structEXE_RELOC{
unsignedshortoffset;
unsignedshortsegment;
};

Calcularea Offset-ului

[modificare|modificare sursă]

Offset-ul de la inceputul executabilului se calculeaza astfel:

exe_data_start=exe.header_paragraphs*16L;

Offset-ulbit-ului după datele din executabil se calculează astfel:

extra_data_start=exe.blocks_in_file*512L;
if(exe.bytes_in_last_block)
extra_data_start-=(512-exe.bytes_in_last_block);