56 votes

Que contient un fichier objet

Salut à tous,

lors des différentes étapes de compilation en C ou C ++, je sais qu'un fichier objet est généré. c'est-à-dire un fichier any_name.o. que contient ce fichier .o en réalité. Je ne peux pas l'ouvrir car c'est un fichier binaire.

Quelqu'un pourrait-il m'aider s'il vous plaît? le contenu du fichier objet dépend-il principalement du compilateur que nous utilisons sous unix?

54voto

Roddy Points 32503

Les fichiers objet peut contenir un tas de trucs: en gros, c'est certains ou de la totalité de la liste ci-dessous:

  • Les Noms De Symboles
  • Le code compilé
  • Constant de données, par exemple. les chaînes
  • Les importations - les symboles qui le code compilé des références (est fixée par l'éditeur de liens)
  • Les exportations des symboles de l'objet fichier met à disposition des AUTRES fichiers de l'objet.

L'éditeur de liens se transforme en un tas de fichiers objets dans un fichier exécutable, en associant toutes les importations et les exportations, et modifiant le code compilé de manière correcte les fonctions appelées.

14voto

kriss Points 10450

Il existe plusieurs formats standard (COFF, ELF sur Unix), ils sont essentiellement des variantes du même format que ceux utilisés pour les fichiers exécutables mais il vous manque des informations. Ces informations seront complétées lors de la liaison.

Les objets les formats de fichiers contient essentiellement les mêmes informations:

  • le code binaire résultant de la compilation (pour un processeur cible)
  • les données statiques utilisés par cette partie du programme (comme les constantes chaînes de caractères, etc). Vous pouvez faire une distinction plus fine entre le SRS (données exportées) et le Texte (données qui ne seront pas modifiés par le programme). Mais ce qui est surtout important pour le compilateur et l'éditeur de liens. Notez que comme le code binaire, les données sont également à charge sur la cible (big-endian, little-endian, 32bits, 64bits).
  • les tables de symboles exportés par cette partie du programme (la plupart des fonctions des points d'entrée)
  • les tables de symboles externes utilisés par cette partie du programme

Lorsque les objets seront reliés ensemble les parties du code qui fait référence à des signes extérieurs seront remplacés par des valeurs réelles (eh bien, c'est encore trop simpliste, il y a une dernière partie qui sera fait à temps de chargement lors de l'exécution du programme, mais c'est l'idée).

L'objet fichier peut également contenir d'autres symboles informations strictement nécessaires à la résolution de l'importation et l'exportation (utile pour le débogage). Cette information peut être retiré à l'aide de la bande de commande.

7voto

Daniel Băluţă Points 940

Lisez d'abord la page du wiki . Vous pouvez utiliser objdump pour examiner un tel fichier :)

6voto

Matthew Flaschen Points 131723

Utilisez la commande de fichier pour des choses comme celle-ci. C'est un fichier objet ELF sur un système Linux moderne. Par exemple, si compilé pour 32 bits x86.

 ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped
 

En revanche, un exécutable lié dynamiquement pourrait ressembler à ceci:

 ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, not stripped
 

Pour voir les en-têtes, y compris les noms de section, vous pouvez utiliser:

 objdump -x any_name.o
 

Pour démonter:

 objdump -d any_name.o
 

5voto

ChrisF Points 74295

Le fichier objet est la source compilée.

Cela signifie que c'est du code machine, qui dépend de la plate-forme cible (vous pouvez compiler pour Unix sous Windows si vous le souhaitez vraiment) et du compilateur utilisé. Différents compilateurs produiront un code machine différent à partir du même fichier source.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X