Code object, temps de liaison en langage C

Lors de la compilation, C produit un code object avant le temps de liaison. Je me demande si le code object est encore sous forme binary? Si oui, que s’est-il passé ensuite dans le temps de couplage?

Wikipedia dit,

En informatique, un fichier object est une collection organisée d’objects nommés, qui sont généralement des séquences d’instructions informatiques au format code machine, qui peuvent être exécutées directement par le processeur d’un ordinateur.

Les fichiers object sont généralement produits par un compilateur à la suite du traitement d’un fichier de code source. Les fichiers object contiennent un code compact et sont souvent appelés “fichiers binarys”.

Un éditeur de liens est généralement utilisé pour générer un exécutable ou une bibliothèque en fusionnant des parties de fichiers objects. Les fichiers object pour les systèmes embarqués ne contiennent généralement que du code machine, mais ils contiennent également des données à utiliser par le code à l’exécution: informations de déplacement, informations de déroulement de stack, commentaires, symboles de programme (noms de variables et de fonctions) permettant d’établir des liens et / ou des fins de débogage et d’autres informations de débogage.

Un autre excellent site contient des informations beaucoup plus détaillées et un diagramme utile, ici : Schéma http://soffr.miximages.com/compilation/ccomstackrlinker001.png

Les fichiers objects produits par le compilateur C contiennent essentiellement du code binary avec des trous à chaque endroit où doit se trouver une adresse encore inconnue (adresses des fonctions d’autres fichiers, y compris des bibliothèques, appelées, adresses des variables d’autres fichiers auxquels on accède dans celui-ci, …).

Il contient également une table indexée par noms de symbole (“x” ou “_x” pour la variable x , “f” ou “_f” pour la fonction f ). Pour chacun de ces symboles, il existe un code d’état (“défini ici”, “non défini ici mais utilisé”, …) et les adresses des trous du code binary qui doivent être archivés avec chaque adresse lorsqu’elle devient connue.

Si vous utilisez Unix (ou gcc sous Windows), vous pouvez imprimer la table la plus récente avec la commande “nm file.o”.

Oui, le code object est généralement sous forme binary. Essayez simplement de l’ouvrir dans votre éditeur de texte préféré.

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