我发现 Microsoft Visual Studio 2003 工具输出的对象文件出现了奇怪的行为。这file
实用程序告诉我:
asmfile.obj: 80386 COFF executable not stripped - version 30821
对于由汇编器创建的对象,但对于来自 C 文件的对象,我得到的只是:
cfile.obj: data
使用微软的dumpbin
效用和objdump
我从 cygwin 获得,我可以反汇编程序集构建的文件,但我从 C 构建文件的任一实用程序中都没有得到有用的结果。
我有几个与此差异相关的问题:
- MSVC2003编译器生成的目标文件格式是什么?
- 我如何反汇编该目标文件?
我对 AT&T 语法中的反汇编特别感兴趣 - 我正在做一个大型源库的移植,以使其与 GCC 一起工作,并且我想使用此方法作为一些内联汇编例程的快捷方式项目。
编辑:添加更多信息。
当我跑步时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
With 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
有一些-I
and -D
选项传递给ml
and to cl
,但为了简洁起见,我在这里省略了它们。这cl
选项已描述here http://msdn.microsoft.com/en-us/library/fwkeyyhe(VS.71).aspx.