Maybaygiare.org

Blog Network

Eseguibile

Vedi anche: File oggetto

I file eseguibili possono essere codificati a mano in linguaggio macchina, anche se è molto più conveniente sviluppare software come codice sorgente in un linguaggio di alto livello che può essere facilmente compreso dagli esseri umani. In alcuni casi, il codice sorgente potrebbe essere specificato in linguaggio assembly, che rimane leggibile dall’uomo pur essendo strettamente associato alle istruzioni del codice macchina.

Il linguaggio di alto livello viene compilato in un file di codice macchina eseguibile o in un file oggetto di codice macchina non eseguibile di qualche tipo; il processo equivalente sul codice sorgente del linguaggio assembly è chiamato assembly. Diversi file oggetto sono collegati per creare l’eseguibile. I file oggetto, eseguibili o meno, sono in genere memorizzati in un formato contenitore, come il formato eseguibile e collegabile (ELF) o l’eseguibile portatile (PE) che è specifico del sistema operativo. Questo dà struttura al codice macchina generato, ad esempio dividendolo in sezioni come .testo (codice eseguibile), .dati (variabili globali e statiche inizializzate), e .rodata (dati di sola lettura, come costanti e stringhe).

I file eseguibili in genere includono anche un sistema di runtime, che implementa funzionalità del linguaggio di runtime (come la pianificazione delle attività, la gestione delle eccezioni, la chiamata di costruttori e distruttori statici, ecc.) e interazioni con il sistema operativo, in particolare passando argomenti, ambiente e restituendo uno stato di uscita, insieme ad altre funzionalità di avvio e spegnimento come il rilascio di risorse come gli handle di file. Per C, questo viene fatto collegando l’oggetto crt0, che contiene il punto di ingresso effettivo e fa l’installazione e l’arresto chiamando la libreria di runtime.

I file eseguibili contengono quindi normalmente un codice macchina aggiuntivo significativo oltre a quello generato direttamente dal codice sorgente specifico. In alcuni casi, è opportuno ometterlo, ad esempio per lo sviluppo di sistemi embedded, o semplicemente per capire come funzionano la compilazione, il collegamento e il caricamento. In C, questo può essere fatto omettendo il solito runtime, e invece specificando esplicitamente uno script di linker, che genera il punto di ingresso e gestisce l’avvio e l’arresto, come chiamare main per avviare e restituire lo stato di uscita al kernel alla fine.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.