2009-10-14 9 views
0

Lors de la compilation, C produit le code objet avant le temps de liaison. Je me demande si le code objet est encore sous forme de binaire? Si oui, que s'est-il passé ensuite dans le temps de liaison?Code objet, temps de liaison en langage C

Répondre

6

Wikipedia dit,

En informatique, un fichier objet est une collection organisée de named objets, et généralement ces objets sont des séquences d'instructions informatiques dans un format de code machine, qui peut être directement exécuté par la CPU d'un ordinateur.

Les fichiers d'objets sont généralement produits par un compilateur à la suite du traitement d'un fichier de code source . Les fichiers objet contiennent le code compact , et sont souvent appelés "binaires".

A linker est typiquement utilisé pour générer un fichier exécutable ou d'une bibliothèque par fusion des parties de fichiers d'objets ensemble. Fichiers objets pour embarqués systèmes contiennent généralement rien mais code machine mais en général, les fichiers objet contiennent également des données pour une utilisation par le code lors de l'exécution: déplacement informations, déroulage pile informations, commentaires, symboles du programme (noms de variables et fonctions) pour des fins de liaison et/ou de débogage, et d'autres informations de débogage.

Un autre site a beaucoup d'infos plus détaillées et un diagramme utile, here: Diagram http://www.tenouk.com/ModuleW_files/ccompilerlinker001.png

0

Oui, le code d'objet est généralement sous forme binaire. Essayez simplement de l'ouvrir dans votre éditeur de texte favori.

Vous pouvez apprendre ce que les linkers font here ou here.

1

Les fichiers objets tels que produits par le compilateur C contiennent essentiellement du code binaire avec des trous à chaque endroit où une adresse doit encore être inconnue (adresses de fonction d'autres fichiers - y compris les bibliothèques -, adresses de variables d'autres les fichiers auxquels on accède dans celui-ci, ...).

Il contient également une table indexée par des noms de symbole ("x" ou "_x" pour la variable x, "f" ou "_f" pour la fonction f). Pour chacun de ces symboles, il y a un code de statut ("défini ici", "non défini ici mais utilisé", ...) et les adresses de trous dans le code binaire qui doivent être classées avec chaque adresse quand elle devient connue.

Si vous utilisez Unix (ou gcc sous Windows), vous pouvez imprimer le tableau suivant avec la commande "nm file.o".

Questions connexes