我发现微软Visual Studio 2003工具输出的目标文件表现出了奇怪的行为。使用file
命令检查时,显示如下:
asmfile.obj: 80386 COFF executable not stripped - version 30821
对于由汇编器创建的对象,但对于来自C文件的对象,我只得到:
cfile.obj: data
使用微软的
dumpbin
工具和从cygwin获取的 objdump
,我可以反汇编汇编生成的文件,但是对于C语言生成的文件,这两个工具都没有有用的结果。我有一些与这种差异相关的问题:
- MSVC2003编译器生成的对象文件格式是什么?
- 如何反汇编该对象文件?
编辑:添加更多信息。
当我对其中一个文件运行
dumpbin
时,没有给出任何结果。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
使用
objdump
命令,会得到以下结果:$ objdump -d Func.obj
objdump: Func.obj: File truncated
针对从汇编生成的文件,我得到了合理的结果。
再次编辑:添加命令行信息。
使用类似于以下命令行的指令来构建汇编文件:
ml -nologo -W3 -WX -c -coff -FoAssemblyFile.obj -Zi -Cx AssemblyFile.asm
ml
单独执行时会显示:
Microsoft (R) Macro Assembler Version 6.15.8803
Copyright (C) Microsoft Corp 1981-2000. All rights reserved.
使用以下命令构建C文件:
cl -nologo -W4 -WX -Gs32768 -GX -Gy -c -FdCFile.pdb -FoCFile.obj -Zi
-Gm -O1 -Oy- -Gy -GL -X CFile.c
这里有一些传递给 ml
和 cl
的选项,包括 -I
和 -D
选项,但由于篇幅原因,在此省略了它们。关于 cl
选项的描述可以在这里找到。
test.obj; 80386 COFF可执行文件未剥离 - 版本25970
。 - Michael Burr.obj
的确切命令行。也许某些选项导致事情走向错误的方向(你没有使用/clr
开关,是吗?)。 - Michael Burr/GL
和/LTCG
并添加了/Od
。然后我可以使用dumpbin /disasm
与obj文件。 - smwikipedia