Vedo ciò che ritengo sia uno strano comportamento dei file oggetto generato dagli strumenti di Microsoft Visual Studio 2003. L'utilità file
mi dice:Disassemblare l'output del compilatore Microsoft Visual Studio 2003
asmfile.obj: 80386 COFF executable not stripped - version 30821
Per gli oggetti creati dal assembler, ma per gli oggetti provenienti da file C, ottengo solo:
cfile.obj: data
Utilizzando dumpbin
utility di Microsoft e la objdump
ho ricevuto da cygwin , Posso disassemblare il file assemblato, ma non ottengo risultati utili da nessuna delle utility per i file creati da C.
Ho un paio di domande relative a questa differenza:
- Cosa viene generato il formato di file oggetto dal compilatore MSVC2003?
- Come posso smontare il file oggetto?
Sono particolarmente interessato a ottenere lo smontaggio in AT & sintassi T - Sto facendo un porto di una grande base di origine per farlo funzionare con GCC, e vorrei utilizzare questo metodo come scorciatoia per alcune delle routine di assemblaggio inline nel progetto.
Modifica: aggiungere ulteriori informazioni.
Quando eseguo dumpbin
su uno di questi file mi dà alcun risultato:
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
Con objdump
, dà:
$ objdump -d Func.obj
objdump: Func.obj: File truncated
sui file costruite dal gruppo, ottengo risultati ragionevoli.
Modifica nuovamente: aggiunta di informazioni sulla riga di comando.
I file di montaggio sono costruiti con una riga di comando simile al seguente:
ml -nologo -W3 -WX -c -coff -FoAssemblyFile.obj -Zi -Cx AssemblyFile.asm
ml
quando eseguito da solo dice:
Microsoft (R) Macro Assembler Version 6.15.8803
Copyright (C) Microsoft Corp 1981-2000. All rights reserved.
I file C sono costruite con il seguente comando:
cl -nologo -W4 -WX -Gs32768 -GX -Gy -c -FdCFile.pdb -FoCFile.obj -Zi
-Gm -O1 -Oy- -Gy -GL -X CFile.c
Ci sono alcuni -I
e -D
opzioni passate a ml
e a cl
, ma li ho omessi per brevità qui. Le opzioni cl
sono descritte here.
@ Michael: hai ragione, anche se il codice generato potrebbe cambiare, gli strumenti come il dumpbin non sono cambiati in modo significativo (le versioni precedenti non gestivano tutti i set di istruzioni più recenti, ma questo è tutto). –
Modificherò per aggiungere ulteriori dettagli. La fonte C può essere * qualsiasi cosa * per quanto posso dire - ogni output di oggetto in questo intero progetto ha lo stesso comportamento. –
Che cosa significa 'file' indica il tipo di quel file oggetto? –