Executabil - Executable

O descărcare hexagonală a unui încărcător în modul real executabil

În calcul , codul executabil , un fișier executabil sau un program executabil , numit uneori pur și simplu executabil sau binar , determină un computer „să efectueze sarcini indicate conform instrucțiunilor codificate ”, spre deosebire de un fișier de date care trebuie interpretat ( analizat ) de un program să fie semnificativ.

Interpretarea exactă depinde de utilizare. În mod tradițional, „instrucțiuni” înseamnă instrucțiuni de codare a mașinii pentru un procesor fizic . În unele contexte, un fișier care conține instrucțiuni de scriptare (cum ar fi bytecode ) poate fi, de asemenea, considerat executabil.

Generarea de fișiere executabile

Fișierele executabile pot fi codate manual în limbajul mașinii, deși este mult mai convenabil să dezvolți software-ul ca cod sursă într-un limbaj la nivel înalt care poate fi ușor înțeles de oameni. În unele cazuri, codul sursă ar putea fi specificat în limbaj de asamblare , care rămâne lizibil de către om în timp ce este strâns asociat cu instrucțiunile codului mașinii.

Limbajul la nivel înalt este compilat fie într-un fișier de cod de mașină executabil, fie într-un fișier de cod de mașină neexecutabil - obiect ; procesul echivalent al codului sursă al limbajului de asamblare se numește asamblare . Mai multe fișiere obiect sunt legate pentru a crea executabilul. Fișierele obiect - executabile sau nu - sunt de obicei stocate într-un format container , cum ar fi Executable and Linkable Format (ELF) sau Portable Executable (PE), care este specific sistemului de operare . Aceasta dă structură codului mașinii generate, de exemplu împărțindu-l în secțiuni precum .text (cod executabil), .data (variabile inițiale globale și statice) și .rodata (date numai în citire, cum ar fi constante și șiruri).

Fișierele executabile includ, de obicei, și un sistem de execuție , care implementează caracteristici de limbaj de execuție (cum ar fi planificarea sarcinilor , gestionarea excepțiilor , apelarea constructorilor și destructorilor statici etc.) și interacțiunile cu sistemul de operare, în special transmiterea argumentelor, mediul și returnarea unei stări de ieșire , împreună cu alte funcții de pornire și oprire, cum ar fi eliberarea resurselor, cum ar fi mânerele de fișiere . Pentru C, acest lucru se face prin conectarea în obiectul crt0 , care conține punctul de intrare real și face configurarea și oprirea apelând biblioteca de runtime .

Fișierele executabile conțin astfel, în mod normal, un cod mașină suplimentar semnificativ dincolo de cel generat direct din codul sursă specific. În unele cazuri, este de dorit să omiteți acest lucru, de exemplu pentru dezvoltarea sistemelor încorporate, sau pur și simplu să înțelegeți cum funcționează compilarea, conectarea și încărcarea. În C, acest lucru se poate face prin omiterea timpului de execuție obișnuit și, în schimb, specificarea explicită a unui script de linker, care generează punctul de intrare și gestionează pornirea și oprirea, cum ar fi apelarea mainpentru a începe și a reveni la starea de ieșire la nucleu la sfârșit.

Execuţie

Pentru a fi executat de sistem (cum ar fi un sistem de operare, firmware sau încărcător de încărcare ), un fișier executabil trebuie să fie conform cu interfața binară de aplicație a sistemului (ABI). Î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 antetului e_entry, care specifică adresa de memorie (virtuală) la care să înceapă execuția. În GCC ( GNU Compiler Collection ) acest câmp este setat de linker pe baza _startsimbolului.

Vezi si

Referințe

linkuri externe