Question

Je vois ce que je pense est un comportement étrange de fichiers objet sortie par les outils Visual Studio 2003 Microsoft. L'utilitaire file me dit:

asmfile.obj: 80386 COFF executable not stripped - version 30821

Pour les objets créés par l'assembleur, mais pour les objets provenant de fichiers C, je reçois juste:

cfile.obj: data

En utilisant l'utilitaire de dumpbin de Microsoft et le objdump je suis arrivé de Cygwin, je peux démonter le fichier assemblage construit, mais j'obtenir aucun résultat utile de ces utilitaires pour les fichiers construits C.

J'ai deux ou trois questions liées à cette différence:

  1. Quel est le format de fichier objet généré par le compilateur MSVC2003?
  2. Comment puis-je démonter le fichier objet?

Je suis particulièrement intéressé à obtenir le démontage AT & T syntaxe - Je fais un port d'une grande base source pour le faire fonctionner avec GCC, et je voudrais utiliser cette méthode comme un raccourci pour une partie de l'assemblage en ligne routines du projet.

Modifier. Ajout d'un peu plus d'informations

Quand je lance dumpbin sur un de ces fichiers me donne aucun résultat:

C:\> dumpbin /disasm Func.obj
Microsoft (R) COFF/PE Dumper Version 7.10.6030    
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file Func.obj

FileType: ANONYMOUS OBJECT

Avec objdump, il donne:

$ objdump -d Func.obj
objdump: Func.obj: File truncated

Sur les fichiers issus de l'assemblage, j'obtenir des résultats raisonnables.

Modifier à nouveau. Ajout d'informations de ligne de commande

Les fichiers d'assemblage sont construits avec une ligne de commande qui ressemble à ce qui suit:

ml -nologo -W3 -WX -c -coff -FoAssemblyFile.obj -Zi -Cx AssemblyFile.asm

ml lorsqu'il est exécuté par lui-même dit:

Microsoft (R) Macro Assembler Version 6.15.8803
Copyright (C) Microsoft Corp 1981-2000.  All rights reserved.

Les fichiers C sont construits avec la commande suivante:

cl -nologo -W4 -WX -Gs32768 -GX -Gy -c -FdCFile.pdb -FoCFile.obj -Zi 
   -Gm -O1 -Oy- -Gy -GL -X CFile.c

Il existe quelques options de -I et -D transmises à ml et cl, mais je les ai omis par souci de concision ici. Les options de cl sont décrites .

Était-ce utile?

La solution

Modifier en fonction des options de ligne de commande cl ajoutés à la question suivante:

Je pense que le problème est l'utilisation de l'option /GL, qui précise que l'optimisation de la génération de code lien temps se fera. à partir d'une page doc sur cette option:

  

obj fichiers produits avec / GL ne seront pas disponibles à ces utilitaires de l'éditeur de liens comme EDITBIN et DUMPBIN.

En utilisant cette option, le compilateur de générer des fichiers .obj que l'éditeur de liens peut effectuer l'ensemble du programme d'optimisation sur - apparemment le format de fichier est propriétaire (quelque part peut-être est documenté, mais je soupçonne pas).

Les documents pour /GL (aussi appelé « toute l'optimisation du programme », « génération de code lien temps », ou LTCG) contiennent plusieurs avertissements sur l'interopérabilité des fichiers .obj ou les bibliothèques contenant ces fichiers objets.


Réponse originale:

Quelle est exactement la source de C pour le fichier obj que vous essayez de démonter? Je reçois le texte suivant à l'aide dumpbin /disasm test.obj pour un simple « Bonjour tout le monde » programme:

Microsoft (R) COFF/PE Dumper Version 8.00.50727.42
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file test.obj

File Type: COFF OBJECT

_main:
  00000000: 55                 push        ebp
  00000001: 8B EC              mov         ebp,esp
  00000003: 6A 01              push        1
  00000005: 68 00 00 00 00     push        offset $SG4665
  0000000A: E8 00 00 00 00     call        _printf
  0000000F: 83 C4 08           add         esp,8
  00000012: 33 C0              xor         eax,eax
  00000014: 3B EC              cmp         ebp,esp
  00000016: E8 00 00 00 00     call        __RTC_CheckEsp
  0000001B: 5D                 pop         ebp
  0000001C: C3                 ret

  Summary

         7AC .debug$S
          30 .debug$T
          2F .drectve
           4 .rdata
           4 .rtc$IMZ
           4 .rtc$TMZ
          1D .text

Note:. Est d'utiliser un fichier .obj compilé par et dumpbin fourni par VS2005, mais je ne peux pas imaginer ce genre de choses aurait changé de VS2003

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top