Fisier executabil
Un fișier executabil (sau pur și simplu un executabil ), în informatică , indică un fișier care conține un program executabil pentru un computer , adică un program scris în limbajul mașinii executabil direct de procesor : se distinge de un fișier sursă , care conține un program scris într-un limbaj de programare de nivel înalt care poate fi executat doar folosind un interpret sau transformându-l mai întâi într-un executabil ( cod obiect + biblioteci ) prin intermediul unui compilator , sau cu o combinație a acestor două instrumente.
Descriere
În general, executabilele depind de platformă : de exemplu, un fișier executabil pentru un sistem Microsoft Windows nu este utilizabil direct în sistemele Unix sau Mac OS (cu excepția cazului în care utilizați software de emulare [1] ). Această restricție se datorează trei motive:
- diferite procesoare acceptă în general limbaje mașini diferite și incompatibile;
- Diferite sisteme de operare folosesc în general diferite formate pentru fișierele executabile: de exemplu în sistemele Unix și Unix , formatul ELF este comun, în timp ce în alte sisteme se utilizează COFF sau derivatele sale, sau chiar Mach-O ;
- pentru a efectua operațiuni de bază (de exemplu intrare / ieșire ) programele executabile trebuie să utilizeze primitivele furnizate de sistemul de operare al computerului pe care sunt rulate, a căror utilizare este specifică sistemului de operare. În consecință, chiar și cu același procesor, un fișier executabil pentru un anumit sistem de operare este în general inutilizabil pe alte platforme sau nu este portabil . De exemplu, fișierele executabile pentru sistemele Microsoft Windows pe arhitectura x86 nu pot fi utilizate direct [1] pe sistemele Linux pe arhitectura x86, chiar dacă ambele folosesc aceeași clasă de procesor.
Fiecare sistem de operare are propria convenție pentru a distinge fișierele executabile de fișierele care conțin date. Unele sisteme folosesc extensii specifice (de exemplu „ .exe
” în MS-DOS și Microsoft Windows ); altele se referă la atributele speciale ale fișierului indicate în permisiunile sale (cum ar fi permisiunea " x
" pentru a executa sistemele Unix și Unix-like ) sau necesită un marker special într-o poziție prestabilită în fișierul însuși: din nou pe Unix, de exemplu, împreună cu bitul „x” se folosește și așa-numitul număr magic , adică unul sau mai mulți octeți cu valori prestabilite plasate la începutul fișierului care identifică tipul, ca în cazul shabangului (acest ideea a fost extinsă la alte sisteme de operare, inclusiv AmigaOS, unde numărul magic se numește „cookie cookie”).
În mod normal, atunci când încărcați un fișier executabil în memorie , codul mașinii trece printr-un proces de relocare . Cu alte cuvinte, toate referințele la adresele de memorie prezente în cod sunt traduse în mod adecvat în funcție de adresa de bază în care programul este încărcat de fapt. Această problemă este atenuată de utilizarea memoriei virtuale ; cu toate acestea, poate fi necesară mutarea bibliotecilor dinamice .
Utilizare
Este realizat într-un format dat și are în principal două scopuri:
a) să fie încărcat de sistemul de operare , deci pregătit pentru execuție;
b) arhitectura hardware a procesorului care îl rulează.
Termenul executabil este uneori folosit într-un sens extins pentru a se referi, de asemenea, la toate acele programe care pot fi executate fără o traducere explicită prealabilă (compilare) în limbajul mașinii. În acest caz, ar putea fi aplicat și pentru:
- scripturi scrise în limbajul textual al sistemului de operare, de exemplu, Bash sau shell-ul Korn pentru sistemele Unix și Unix , sau așa-numitele fișiere batch pentru MS-DOS și Microsoft Windows;
- programe sursă de limbaje interpretate ca BASIC , Perl , Python sau Ruby din nou;
- programe semi- (sau pseudo-) compilate, adică traduse de compilator într-un cod de nivel intermediar (care nu este încă limbaj mașină) care trebuie executat printr-un interpret separat, așa cum este cazul de exemplu pentru Java , Visual Basic și .NET :
- Compilatorul Java produce, pornind de la codul sursă Java, o serie de fișiere într-un limbaj intermediar numit bytecode . Mașina virtuală Java execută bytecode-ul având grijă atât de interpretarea instrucțiunilor, cât și de link .
- Compilatorul Visual Basic produce un executabil care conține o mică bucată de cod de mașină executabilă, cu singura sarcină de a încărca mașina virtuală Visual Basic, numită Visual Basic Runtime . Restul fișierului conține date de cod intermediar care sunt interpretate de Visual Basic Runtime.
- În platforma Microsoft .NET , foarte asemănătoare cu Java, executabilele sunt compilate într-un bytecode numit Microsoft Intermediate Language (MSIL) , rulat de o mașină virtuală numită Common Language Runtime . Mediile moderne de dezvoltare sunt capabile să traducă numeroase limbi în MSIL, inclusiv C # , Visual Basic , Delphi și chiar COBOL .