Fișier executabil
fișier care poate fi rulat direct de un computer From Wikipedia, the free encyclopedia
Remove ads
În tehnica de calcul, codul executabil, fișierul executabil sau programul executabil, uneori denumit pur și simplu executabil sau binar, determină un calculator „să execute sarcinile indicate conform instrucțiunilor codificate”,[1] spre deosebire de un fișier de date care trebuie să fie interpretat (parsat) de un program pentru a avea sens.

Interpretarea exactă depinde de utilizare. Cuvântul „instrucțiuni” este, de regulă, interpretat ca reprezentând instrucțiuni de cod de mașină pentru un procesor fizic. [2] În unele contexte, un fișier care conține instrucțiuni de scriptare (cum ar fi bytecode) ar putea fi considerat executabil.
Remove ads
Generarea de fișiere executabile
Fișierele executabile pot fi codificate manual în limbajul mașinii, deși este mult mai convenabil să se dezvolte software ca cod sursă într-un limbaj de nivel înalt care poate fi ușor de înțeles de către oameni. În unele cazuri, codul sursă poate fi specificat în limbaj de asamblare, cu o lizibilitate limitată pentru om, în timp ce este strâns asociat cu instrucțiunile codului mașinii.
Limbajul de nivel înalt este compilat fie într-un fișier de cod de mașină executabil, fie într-un cod de mașină neexecutabil – fișier de tip obiect; procesul echivalent pe codul sursă în limbajul de asamblare se numește asamblare (sau asemblare). Mai multe fișiere de tip obiect sunt legate pentru a crea executabilul.
Fișierele de tip obiect - executabile sau nu - sunt de obicei stocate într-un format container, cum ar fi Executable and Linkable Format (ELF) sau Executabilul Portabil (PE), care este specific sistemului de operare.[3] Acest lucru dă structura codului mașină generat, de exemplu împărțindu-l în secțiuni precum .text(d) (cod executabil), .data(d) (variabile globale și statice inițializate(d)) și .rodata (date numai pentru citire, cum ar fi constante și șiruri).
Fișierele executabile includ de obicei și un sistem de rulare (sau runtime), care implementează caracteristici ale limbajului de rulare (cum ar fi planificarea taskurilor, gestionarea excepțiilor, apelul constructorilor și destructorilor statici etc.). Acesta gestionează și interacțiunile cu sistemul de operare, în special transmiterea de argumente, mediul și returnarea unei stări de ieșire, împreună cu alte funcții de pornire și oprire, cum ar fi eliberarea de resurse, cum ar fi descriptori de fișiere (în engleză: file descriptors sau handles).
Pentru C, acest lucru se face prin conectarea la obiectul crt0(d), care conține punctul de intrare real și efectuează configurarea și oprirea apelând biblioteca de runtime.[4]
Astfel, fișierele executabile conțin în mod normal un cod de mașină suplimentar semnificativ în afara celui generat direct din codul sursă specific.
În unele cazuri, este de dorit ca acesta să fie omis, de exemplu pentru dezvoltarea sistemelor încorporate sau pur și simplu pentru a înțelege cum funcționează compilarea, linkarea și încărcarea. În C, acest lucru se poate face prin omiterea runtime-ului obișnuit, specificând, în schimb, în mod explicit un script de legare (linker script), care generează punctul de intrare și se ocupă de pornire și oprire, cum ar fi apelarea funcției main pentru a porni și returnarea stării de ieșire către kernel la final.[5]
Remove ads
Structura și formatele de fișiere
Structura unui fișier executabil este specificată de formatul de fișier executabil adoptat de sistemul de operare. Aceste formate nu conțin doar codul de mașină, ci și metadate esențiale necesare încărcătorului de sistem (OS loader) pentru a mapa fișierul în memorie și a pregăti execuția.
- Executable and Linkable Format (ELF) - Este formatul standard pentru sistemele de operare de tip Unix, inclusiv Linux, Solaris și BSD. Structura sa include un antet ELF, o tabelă de antete de program (care descriu segmentele de memorie) și secțiuni (precum `.text`, `.data`, `.rodata`).
- Portable Executable (PE) - Este formatul standard utilizat de Microsoft Windows (fișiere `.exe`, `.dll`, `.sys`, `.ocx`). PE este o modificare a formatului COFF (Common Object File Format) și este conceput pentru a fi „portabil” pe diverse arhitecturi (x86, x64). Din motive de compatibilitate cu versiunile vechi, fișierele PE includ adesea un antet MS-DOS și un mic program MS-DOS care afișează mesajul „This program cannot be run in DOS mode.” (Acest program nu poate fi rulat în modul DOS).
- Alte formate:
- Mach-O - Folosit de sistemele macOS și iOS de la Apple.
- COM - Un format simplu, mai vechi, utilizat de MS-DOS, limitat la 64 KB, care conține doar cod și date fără antete sau metadate complexe.
În afară de codul executabil propriu-zis, fișierele moderne (precum PE) pot conține și alte componente numite resurse, cum ar fi:
- Pictograma programului (icon).
- Imagini (bitmap-uri) și elemente pentru interfața grafică (GUI).
- Diverse date necesare programului.
Remove ads
Execuție
Pentru a fi executat de sistem (cum ar fi un sistem de operare, firmware sau încărcător de pornire(d) (bootloader)), un fișier executabil trebuie să se conformeze interfeței binare de aplicație (ABI) a sistemului.[6]
În interfețele simple, un fișier este executat încărcându-l în memorie și sărind la începutul spațiului de adrese și executând de acolo. În interfețele mai complicate, fișierele executabile au metadate suplimentare care specifică un punct de intrare separat.
De exemplu, în ELF, punctul de intrare este specificat în câmpul e_entry al antetului, care specifică adresa de memorie (virtuală) la care să înceapă execuția. În GCC (GNU Compiler Collection), acest câmp este setat de către linker pe baza simbolului _start.
Note
Legături externe
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads
