File eseguibile

Da Wikipedia, l'enciclopedia libera.

In informatica, un file eseguibile, o semplicemente un eseguibile, è un file che contiene un programma eseguibile per un computer, ovvero un programma scritto in linguaggio macchina nel formato adatto ad essere caricato dal sistema operativo, quindi pronto per l'esecuzione, e all'architettura hardware del processore che lo esegue.

Si distingue da un file sorgente, che contiene un programma scritto in un linguaggio di programmazione ad alto livello il quale può essere eseguito solo utilizzando un interprete o trasformandolo prima in eseguibile (codice oggetto + librerie) tramite un compilatore, o con una combinazione di questi due strumenti.

Descrizione[modifica | modifica wikitesto]

In generale, gli eseguibili sono dipendenti dalla piattaforma: per esempio, un file eseguibile per un sistema Microsoft Windows non è direttamente utilizzabile in sistemi Unix o Mac OS (a meno di non usare un software di emulazione[1]). Questa restrizione è dovuta a tre motivi:

  • processori diversi supportano linguaggi macchina generalmente diversi e incompatibili tra di loro;
  • sistemi operativi diversi usano generalmente formati diversi per i file eseguibili: ad esempio nei sistemi Unix e Unix-like è comune il formato ELF, mentre in altri sistemi si usa COFF o suoi derivati, o anche Mach-O;
  • per effettuare operazioni di base (per esempio l'input/output) i programmi eseguibili devono avvalersi delle primitive fornite dal sistema operativo del computer su cui sono eseguiti, il cui utilizzo è specifico per sistema operativo.

Di conseguenza, anche a parità di processore, un file eseguibile per un particolare sistema operativo è in generale inutilizzabile su altre piattaforme ovvero non è portabile. Ad esempio, i file eseguibili per i sistemi Microsoft Windows su architettura x86 non possono essere utilizzati direttamente[1] su sistemi Linux su architettura x86, anche se queste entrambi utilizzano la stessa classe di processori.

Ogni sistema operativo ha una propria convenzione per distinguere i file eseguibili dai file che contengono dati. Alcuni sistemi utilizzano specifiche estensioni (per esempio ".exe" in MS-DOS e Microsoft Windows); altri fanno riferimento a speciali attributi del file indicati nei suoi permessi (come il permesso "x" di esecuzione dei sistemi Unix e Unix-like) o richiedono uno speciale marcatore in una posizione prestabilita all'interno del file stesso: ancora su Unix, per esempio, congiuntamente al bit "x", viene utilizzato anche il cosiddetto magic number, ovvero uno o più byte con valori prestabiliti collocati all'inizio del file che ne identificano il tipo, come nel caso dello shabang (questa idea è stata estesa ad altri sistemi operativi tra cui AmigaOS dove il magic number viene chiamato "magic cookie" o biscottino magico).

Normalmente, durante il caricamento di un file eseguibile in memoria, il codice macchina viene sottoposto a un processo di rilocazione. In altre parole, tutti i riferimenti a indirizzi di memoria presenti nel codice vengono opportunamente traslati in funzione dell'indirizzo di base in cui il programma viene effettivamente caricato. Questo problema è mitigato dall’uso della memoria virtuale; può tuttavia essere necessaria la rilocazione delle librerie dinamiche.

Altri usi[modifica | modifica wikitesto]

Il termine eseguibile viene talvolta utilizzato in senso esteso per riferirsi anche a tutti quei programmi che possono essere eseguiti senza una previa traduzione esplicita (compilazione) in linguaggio macchina. In questo caso esso potrebbe essere applicato anche a:

Note[modifica | modifica wikitesto]

  1. ^ a b Entro certi limiti è possibile usarli tramite Wine

Voci correlate[modifica | modifica wikitesto]