Car*_*rum 5 c coff disassembly visual-studio object-files
我看到我认为Microsoft Visual Studio 2003工具输出的目标文件的奇怪行为.该file实用程序告诉我:
asmfile.obj: 80386 COFF executable not stripped - version 30821
Run Code Online (Sandbox Code Playgroud)
对于汇编程序创建的对象,但对于来自C文件的对象,我只得到:
cfile.obj: data
Run Code Online (Sandbox Code Playgroud)
使用Microsoft的dumpbin实用程序和objdump我从cygwin获得的,我可以反汇编程序集生成的文件,但是我从C-built文件的任一实用程序中都得不到有用的结果.
我有几个与这种差异有关的问题:
我对使用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
Run Code Online (Sandbox Code Playgroud)
有objdump,它给出:
$ objdump -d Func.obj
objdump: Func.obj: File truncated
Run Code Online (Sandbox Code Playgroud)
关于从汇编构建的文件,我得到了合理的结果.
再次编辑:添加命令行信息.
汇编文件使用类似于以下内容的命令行构建:
ml -nologo -W3 -WX -c -coff -FoAssemblyFile.obj -Zi -Cx AssemblyFile.asm
Run Code Online (Sandbox Code Playgroud)
ml 当自己执行时说:
Microsoft (R) Macro Assembler Version 6.15.8803
Copyright (C) Microsoft Corp 1981-2000. All rights reserved.
Run Code Online (Sandbox Code Playgroud)
使用以下命令构建C文件:
cl -nologo -W4 -WX -Gs32768 -GX -Gy -c -FdCFile.pdb -FoCFile.obj -Zi
-Gm -O1 -Oy- -Gy -GL -X CFile.c
Run Code Online (Sandbox Code Playgroud)
有一些-I和-D传递给选项ml和cl,但是我在这里省略了对它们的简洁.该cl选项说明这里.
根据添加到问题中的 cl 命令行选项进行编辑:
我认为问题在于该/GL选项的使用,该选项指定将完成链接时代码生成优化。从该选项的文档页面:
使用 /GL 生成的 obj 文件将不可用于 EDITBIN 和 DUMPBIN 等链接器实用程序。
使用此选项会导致编译器生成链接器.obj可以执行程序范围优化的文件 - 显然该文件格式是专有的(也许它记录在某处,但我怀疑没有)。
/GL(也称为“整个程序优化”、“链接时代码生成”或 LTCG)的文档包含有关.obj包含此类对象文件的文件或库的互操作性的多个警告。
原答案:
您尝试反汇编的 .obj 文件的 C 源代码中到底包含什么?我得到以下用于dumpbin /disasm test.obj简单的“hello world”程序的信息:
Microsoft (R) COFF/PE Dumper Version 8.00.50727.42
Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file test.obj
File Type: COFF OBJECT
_main:
00000000: 55 push ebp
00000001: 8B EC mov ebp,esp
00000003: 6A 01 push 1
00000005: 68 00 00 00 00 push offset $SG4665
0000000A: E8 00 00 00 00 call _printf
0000000F: 83 C4 08 add esp,8
00000012: 33 C0 xor eax,eax
00000014: 3B EC cmp ebp,esp
00000016: E8 00 00 00 00 call __RTC_CheckEsp
0000001B: 5D pop ebp
0000001C: C3 ret
Summary
7AC .debug$S
30 .debug$T
2F .drectve
4 .rdata
4 .rtc$IMZ
4 .rtc$TMZ
1D .text
Run Code Online (Sandbox Code Playgroud)
注意:这是使用VS2005.obj编译和dumpbin提供的文件,但我无法想象这些东西与 VS2003 相比会有多大变化。
| 归档时间: |
|
| 查看次数: |
3606 次 |
| 最近记录: |