Desmonte a saída do compilador Microsoft Visual Studio 2003
Estou vendo o que considero um comportamento estranho dos arquivos de objetos gerados pelas ferramentas do Microsoft Visual Studio 2003. ofile
utilitário me diz:
asmfile.obj: 80386 COFF executable not stripped - version 30821
Para objetos criados pelo assembler, mas para objetos provenientes de arquivos C, recebo apenas:
cfile.obj: data
Usando o Microsoftdumpbin
utilidade e oobjdump
Peguei o cygwin, posso desmontar o arquivo criado por assembly, mas não obtive resultados úteis em nenhum utilitário para os arquivos criados em C.
Eu tenho algumas perguntas relacionadas a essa diferença:
Qual é o formato do arquivo de objeto gerado pelo compilador MSVC2003?Como posso desmontar esse arquivo de objeto?Estou particularmente interessado em obter a desmontagem na sintaxe da AT&T - estou fazendo uma porta de uma grande base de origem para que funcione com o GCC e gostaria de usar esse método como um atalho para algumas das rotinas de montagem em linha no diretório projeto.
Editar: Adicionando mais algumas informações.
Quando eu corrodumpbin
em um desses arquivos não me dá resultados:
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
Comobjdump
, dá:
$ objdump -d Func.obj
objdump: Func.obj: File truncated
Nos arquivos criados a partir da montagem, obtenho resultados razoáveis.
Editar novamente: adicionando informações da linha de comando.
Os arquivos de montagem são criados com uma linha de comando semelhante à seguinte:
ml -nologo -W3 -WX -c -coff -FoAssemblyFile.obj -Zi -Cx AssemblyFile.asm
ml
quando executado por si só diz:
Microsoft (R) Macro Assembler Version 6.15.8803
Copyright (C) Microsoft Corp 1981-2000. All rights reserved.
Os arquivos C são criados com o seguinte comando:
cl -nologo -W4 -WX -Gs32768 -GX -Gy -c -FdCFile.pdb -FoCFile.obj -Zi
-Gm -O1 -Oy- -Gy -GL -X CFile.c
Há alguns-I
e-D
opções passadas paraml
e paracl
, mas eu os omiti por brevidade aqui. ocl
opções são descritasaqui.