Démontez Microsoft Visual Studio 2003 sortie du compilateur
-
03-10-2019 - |
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:
- Quel est le format de fichier objet généré par le compilateur MSVC2003?
- 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 .
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