我从 Microsoft Visual Studio 2003 工具输出的目标文件中看到了我认为奇怪的行为。该file
实用程序告诉我:
asmfile.obj: 80386 COFF executable not stripped - version 30821
对于汇编程序创建的对象,但对于来自 C 文件的对象,我得到的只是:
cfile.obj: data
使用 Microsoft 的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
随着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
和 to cl
,但为了简洁起见,我在这里省略了它们。此处描述了这些cl
选项。