Quina diferència hi ha entre un codi d'objecte i un fitxer executable?


Resposta 1:

En paraules senzilles, el codi executable és el codi en llenguatge de màquina (codi binari) que l’ordinador l’entén directament i l’executa sense necessitar més simplificacions, mentre que el codi objecte és el codi produït per un compilador o intèrpret. com en el llenguatge C. També es pot fer un codi de byte en cas de llenguatge Java on s'ha de simplificar encara més a codi binari, que es pot anomenar codi executable.

Així, un programa en codi binari o llenguatge de màquina es pot anomenar fitxer executable, mentre que el codi de programa produït pel compilador (pot ser codi binari de vegades, en aquest cas també es pot anomenar fitxer executable) s'anomena fitxer objecte.


Resposta 2:

Els fitxers objecte són produïts pel compilador, un per fitxer de codi font. A continuació, l’enllaçador els combina en un sol fitxer executable mitjançant la resolució de les adreces de trucada de subrutina i de totes les adreces de variables globals. El linker també sap on ha d’esperar el sistema operatiu principal () i el col·loca primer.


Resposta 3:

El codi d'objectes sol incloure algunes referències simbòliques que s'han de resoldre ("lligades") abans que es pugui produir l'execució.

El codi executable es processa completament en un llenguatge de màquina: totes les referències externes es guarden com a adreces absolutes (o es registren referències que es carreguen amb adreces absolutes).

Dit això, molts (potser la majoria) llenguatges moderns deixen que algunes referències siguin "lligades" en temps d'execució, fins i tot dins dels anomenats fitxers executables.


Resposta 4:

Un fitxer executable és un programa complet que pot ser executat directament per un sistema operatiu (conjuntament amb biblioteques compartides i trucades del sistema). El fitxer conté generalment una taula de continguts, diversos blocs de codi i blocs de dades, dades auxiliars, com ara les adreces de memòria en què s’han de carregar diferents blocs, quines biblioteques compartides són necessàries, l’adreça del punt d’entrada i, de vegades, una taula de símbols per depuració. Un sistema operatiu pot executar un fitxer executable més o menys carregant blocs de codi i dades a la memòria a les adreces indicades i saltant-hi.

La majoria dels programes s’escriuen amb codi font dividit lògicament en diversos fitxers font. Cada fitxer font es compila de forma independent en un fitxer "objecte" corresponent del codi màquina parcialment format conegut com a codi d'objecte. Més endavant aquests "fitxers objecte" es "lliguen" junts per formar un fitxer executable.

Els fitxers d'objectes tenen molt en comú amb els fitxers executables (taula de continguts, blocs d'instruccions i dades de màquina i informació de depuració). Tanmateix, el codi no està preparat per executar-se. Està ple de referències incompletes a subrutines fora d’ella mateixa i, per tant, moltes de les instruccions de la màquina només tenen adreces de marcador de posició.

L’enllaç, com a fase final de recopilació, llegirà tots els fitxers d’objectes, resoldrà referències entre ells, realitzarà la disposició final de codi a la memòria que determina les adreces de tots els blocs de codi i dades, arreglarà totes les adreces de marcador de posició amb adreces reals i escriviu el fitxer executable.


Resposta 5:

El codi objecte és el llenguatge executable codificat binari en què el processador de computadora llegeix i executa les microinstruccions.

D'altra banda, estàs demanant un fitxer executable, i pot ser que tingui moltes coses, per exemple, un fitxer que conté tots els codis (executables, objectes) esmentats, però també pot ser un fitxer que conté un tipus de coses completament diferents. , incloent-hi un codi executable inicial de bootstrap (igual que el codi d'objecte) i després una peça comprimida, que no es comprimeix pel codi bootstrapper i que presenta una altra peça de qualsevol cosa, fins i tot un virus.

El codi objecte també és un nom utilitzat per al codi compilat, que està escrit en llenguatge de màquines, però té una estructura que cal vincular-se per convertir-la en codi obectable executable, com la anterior.