Je vois ce que je pense être un comportement étrange des fichiers objets générés par les outils Microsoft Visual Studio 2003. L'utilitaire file
me dit:Désassembler la sortie du compilateur Microsoft Visual Studio 2003
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
Utilisation de l'utilitaire de Microsoft dumpbin
et objdump
je suis arrivé de Cygwin , Je peux démonter le fichier assemblé, mais je n'obtiens aucun résultat utile de l'un ou l'autre utilitaire pour les fichiers C-construits.
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ésassembler ce 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 certaines des routines d'assemblage en ligne dans le projet.
Modifier: Ajout d'informations supplémentaires.
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 sur la 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 y en a quelques -I
et -D
options passées à ml
et à cl
, mais je les ai omis pour la brièveté ici. Les options cl
sont décrites here.
@Michael: vous avez raison - bien que le code réel généré puisse changer, les outils comme dumpbin n'ont pas changé de manière significative (les anciennes versions ne traitaient pas tous les derniers jeux d'instructions, mais c'est à peu près tout). –
Je vais modifier pour ajouter plus de détails. La source C peut être * n'importe quoi * autant que je sache: chaque objet produit dans ce projet entier a le même comportement. –
Qu'est-ce que 'fichier' vous indique le type de ce fichier objet? –