Codice oggetto

In informatica, il codice oggetto (o file oggetto) è la traduzione del sorgente in linguaggio macchina (binario), comprensibile solo all'elaboratore. Il codice oggetto è generato automaticamente da un apposito programma detto compilatore, e verrà poi passato ad un linker che genererà un codice eseguibile. Questi due passi sono a volte fusi in uno solo, detto generalmente di compilazione.

Mentre il programma sorgente corrisponde, volendo fare un paragone, al progetto di una casa, il programma oggetto corrisponde alla casa in sé, che viene utilizzata. Il file oggetto è quindi agli occhi dell'utilizzatore il programma che gira sul computer. I contenuti del codice oggetto sono specifici sia a seconda del tipo di computer utilizzato, sia a seconda del compilatore o linguaggio utilizzato per generarlo. In linea generale codici oggetto per computer differenti non possono essere scambiati, né è possibile mescolare codici oggetto generati da compilatori diversi (esistono molte eccezioni a quest'ultima regola).

I codici oggetto si trovano normalmente raggruppati in file oggetto che contengono una serie di funzioni strettamente imparentate tra di loro, ad esempio una serie di operazioni matematiche. Ciò permette di avere un numero maneggevole di file oggetto, dai quali l'utente ne sceglierà un insieme limitato per il suo programma. Tali file oggetto vengono spesso chiamate librerie, di cui ne esistono diversi tipi.

Il codice oggetto è composto normalmente da codice eseguibile, più una serie di informazioni che permettono al linker di unirlo, se richiesto, con altri codici oggetto per generare un programma funzionante. Queste informazioni sono per la maggior parte inserite nella decorazione delle funzioni presenti nel codice oggetto.

Chi ha soltanto il file oggetto può utilizzarlo, ma è generalmente impossibile risalire al codice sorgente che lo ha generato. L'analisi del codice oggetto per risalire alle sue funzioni (nel caso queste non siano note) è, se non impossibile, perlomeno molto difficile, ed è un ramo del reverse engineering.