加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

反汇编Microsoft Visual Studio 2003编译器输出

发布时间:2020-12-13 21:28:38 所属栏目:Windows 来源:网络整理
导读:我看到我认为Microsoft Visual Studio 2003工具输出的目标文件的奇怪行为.文件实用程序告诉我: asmfile.obj: 80386 COFF executable not stripped - version 30821 对于汇编程序创建的对象,但对于来自C文件的对象,我只得到: cfile.obj: data 使用Microsoft
我看到我认为Microsoft Visual Studio 2003工具输出的目标文件的奇怪行为.文件实用程序告诉我:
asmfile.obj: 80386 COFF executable not stripped - version 30821

对于汇编程序创建的对象,但对于来自C文件的对象,我只得到:

cfile.obj: data

使用Microsoft的dumpbin实用程序和我从cygwin获得的objdump,我可以反汇编程序集生成的文件,但是我从C-built文件的任一实用程序中都没有得到任何有用的结果.

我有几个与这种差异有关的问题:

> 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和-D选项传递给ml和cl,但为了简洁起见,我省略了它们. cl选项描述为here.

根据添加到问题的cl命令行选项进行编辑:

我认为问题是使用/ GL选项,它指定将完成链接时代码生成优化.从该选项的文档页面:

obj files produced with /GL will not be available to such linker utilities as EDITBIN and 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

注意:这是使用由VS2005提供的.obj文件和由dump2005提供的dumpbin,但我无法想象这些东西会从VS2003中发生很大变化.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读