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

2024-04-07

我发现 Microsoft Visual Studio 2003 工具输出的对象文件出现了奇怪的行为。这file实用程序告诉我:

asmfile.obj: 80386 COFF executable not stripped - version 30821

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

cfile.obj: data

使用微软的dumpbin效用和objdump我从 cygwin 获得,我可以反汇编程序集构建的文件,但我从 C 构建文件的任一实用程序中都没有得到有用的结果。

我有几个与此差异相关的问题:

  1. MSVC2003编译器生成的目标文件格式是什么?
  2. 我如何反汇编该目标文件?

我对 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.


根据添加到问题中的 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

注意:这是使用.obj由 和 a 编译的文件dumpbin由 VS2005 提供,但我无法想象这些东西与 VS2003 相比会有多大变化。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

反汇编 Microsoft Visual Studio 2003 编译器输出 的相关文章

  • 在 VS2017 下使用 Conan 和 CMake 项目进行依赖管理

    我正在尝试使用 CMake 与 VS2017 集成为 C 设置一个开发环境 以便在 Linux x64 下进行编译 为了更好地管理依赖关系 我选择使用 Conan 但我对这个软件还很陌生 我想知道让 VS2017 识别项目依赖关系的最佳方法
  • 从多线程程序中调用 system()

    我们正在开发一个用 C 编写的多线程内存消耗应用程序 我们必须执行大量的 shellscript linux 命令 并获取返回码 读完之后article http www linuxprogrammingblog com threads a
  • (const T v) 在 C 中从来都不是必需的,对吗?

    例如 void func const int i 在这里 const是不必要的 因为所有参数都是按值传递的 包括指针 真的吗 C 中的所有参数确实都是按值传递 这意味着无论您是否包含该参数 实际参数都不会改变const or not 然而
  • CultureInfo 的实例(来自相同的文化)根据操作系统而变化

    我有一个网站 上面写着这样的日期 CultureInfo cultureInfo CultureInfo GetCultures CultureTypes AllCultures FirstOrDefault c gt string Equ
  • 在 C# Winforms 应用程序中嵌入 Windows XP 主题

    我有一个旧版 C Windows 窗体应用程序 其布局是根据 Windows XP 默认主题设计的 由于需要将其作为 Citrix 应用程序进行分发 该应用程序现在看起来像经典主题应用程序 因为 Citrix 不鼓励使用主题系统服务 所以
  • 如何创建用于 QML 的通用对象模型?

    我想知道是否有任何宏或方法如何将 Qt 模型注册为 QObject 的属性 例如 我有AnimalModel http doc qt io qt 5 qtquick modelviewsdata cppmodels html qabstra
  • SFINAE 如何使用省略号?

    过去 当使用 SFINAE 选择构造函数重载时 我通常使用以下内容 template
  • 获取尚未实例化的类的函数句柄

    我对 C 相当陌生 我想做的事情可能看起来很复杂 首先 我想获取一些函数的句柄以便稍后执行它们 我知道我可以通过以下方式实现这一目标 List
  • 劫持系统调用

    我正在编写一个内核模块 我需要劫持 包装一些系统调用 我正在暴力破解 sys call table 地址 并使用 cr0 来禁用 启用页面保护 到目前为止一切顺利 一旦完成 我将公开整个代码 因此如果有人愿意 我可以更新这个问题 无论如何
  • HttpWebRequest vs Webclient(特殊场景)

    我知道这个问题之前已经回答过thread https stackoverflow com questions 1694388 webclient vs httpwebrequest httpwebresponse 但我似乎找不到详细信息 在
  • 如何在 C++ 中将 CString 转换为 double?

    我如何转换CString to a double在 C 中 Unicode 支持也很好 Thanks A CString可以转换为LPCTSTR 这基本上是一个const char const wchar t 在 Unicode 版本中 知
  • C++ 插件的“最适合”动态类型匹配

    我有一个几乎所有东西都是插件的架构 该架构以图形用户界面为基础 其中每个插件都由一个 表面 即用户可以通过其与插件交互的 UI 控件 表示 这些表面也是插件 每当添加新插件时 瘦主机都会自动确定哪个可用表面与其最匹配的 UI 如何在 C 中
  • 分配器感知容器和propagate_on_container_swap

    The std allocator traits模板定义了一些常量 例如propagate on container copy move assign让其他容器知道它们是否应该在复制或移动操作期间复制第二个容器的分配器 我们还有propag
  • C# 中的常量和只读? [复制]

    这个问题在这里已经有答案了 可能的重复 const 和 readonly 之间有什么区别 https stackoverflow com questions 55984 what is the difference between cons
  • DataTable:通过 LINQ 或 LAMBDA 进行动态 Group By 表达式

    我有一个数据表 我想在其中对未指定数量的字段进行分组 发生这种情况的原因是用户可以选择他想要分组的字段 所以 实际上 我将选择推入列表中 在这个选择上 我必须对我的数据表进行分组 想象一下这段代码 VB 或 C 都一样 public voi
  • 使用 HTMLAgilityPack 从节点的子节点中选择所有

    我有以下代码用于获取 html 页面 将网址设置为绝对 然后将链接设置为 rel nofollow 并在新窗口 选项卡中打开 我的问题是关于将属性添加到 a s string url http www mysite com string s
  • 如何引用解决方案之外的项目?

    我有一个 Visual Studio C 解决方案 其中包含一些项目 其中一个项目需要引用另一个不属于解决方案的项目 一开始我引用了dll
  • Visual Studio 2017 完全支持 C99 吗?

    Visual Studio 的最新版本改进了对 C99 的支持 最新版本VS2017现在支持所有C99吗 如果没有 C99 还缺少哪些功能 No https learn microsoft com en us cpp visual cpp
  • 受限 AppDomain 中的代码访问安全异常

    Goal 我需要在权限非常有限的 AppDomain 中运行一些代码 它不应该访问任何花哨或不安全的内容 except对于我在其他地方定义的一些辅助方法 我做了什么 我正在创建一个具有所需基本权限的沙箱 AppDomain 并创建一个运行代
  • OSError: [WinError 193] %1 不是有效的 Win32 应用程序,同时使用 CTypes 在 python 中读取自定义 DLL

    我正在尝试编写用 python 封装 C 库的代码 我计划使用 CTypes 来完成此操作 并使用 Visual Studio 来编译我的 DLL 我从一个简单的函数开始 在 Visual Studio 内的标头中添加了以下内容 然后将其构

随机推荐

  • 如何以编程方式创建 Func<> 委托

    我有一个小型依赖注入框架 我正在尝试解决它Lazy lt gt 动态实例 我们的想法是做这样的事情 DIContainer Register
  • 使用自定义段变量设置 ASP.Net MVC 4 路由

    我刚刚开始开发一个具有几个区域的应用程序 基本网格主控 详细信息类型系统 我正在考虑利用 MVC 中良好的路由功能 特别是 4 但我 只是不明白 我相信 目前唯一定义的路线是基本路线 routes MapRoute Default cont
  • 根据多个键控列将缺失行添加到 data.table

    我有一个data table包含指定唯一情况的多个列的对象 在下面的小例子中 变量 name job and sex 指定唯一的 ID 我想添加缺失的行 以便每个案例对于另一个变量的每个可能实例都有一行 from 如同expand grid
  • mod_fcgid:多线程 FastCGI 现在还是计划中的未来?

    迄今为止的事实 根据 mod fcgi 不是 mod fastcgi 的替代品 http www apachelounge com viewtopic php t 4385 and mod fcgid 和多线程 FastCGI 应用程序的问
  • 如何更改 networkx / matplotlib 图形绘制的属性?

    NetworkX 包括功能 http networkx lanl gov reference drawing html用于绘制图表使用绘图库 http matplotlib org 这是一个使用出色的 IPython Notebook 的示
  • 仅显示所需参数

    我创建了一个应用程序如下本教程 http geddyjs org tutorial 无脚手架 创建项目后 我可以单击它 它会显示一个大参数列表 像这儿 http s15 postimage org j6at9koiz parameters
  • 使用 python3.5 将 Arduino 的实时数据链接到 pyqt5 的 LCDNumber

    我对制作 GUI 还很陌生 我为一个项目设计了一个项目 我希望在数据从 Arduino 传入时更新 LCD 我正在使用 pyqt5 来转换我的 Qtdesigner GUI 问题是我不知道如何将传入数据链接到 GUI 目前 我有一个程序可以
  • 基于嵌套键值数组对弹性搜索查询进行排序

    我有一个 json uniqueKey 918084 dataValue metadata timestamps key startTime value 2017 02 07T18 00 00 06 00 key processedTime
  • 在不附加 GDB 的情况下获取所有线程的堆栈跟踪

    有没有一种方法可以在不附加 GDB 的情况下打印所有线程的堆栈跟踪 或者是否有一个命令可以用作 gdb 批处理模式来打印所有线程的堆栈跟踪 elfutils https sourceware org elfutils 除其他实用程序外 还包
  • 灵气文法可以作为灵业文法重复使用吗?

    我有一个 Qi 语法定义 用于解析输入 后来我有一个 Karma 生成器 以与输入类似的方式输出 这有可能吗 似乎解析器语法可以自动转换为生成器语法 include
  • tsc 在 dist 中创建 src 文件夹

    我有这个文件夹结构 src subdir1 subdir2 这是我的tsconfig json compilerOptions target es2015 module commonjs sourceMap true declaration
  • SSIS - 多表插入

    我正在使用 SSIS 将数据从 MS Access 复制到 SQL Server 我只会复制一次 这不是重复的任务 只有一张源表 Table Source 我想将数据插入两个表 Table1 和 Table2 Table1 包含一个主键 它
  • Apache - 如何获取 REMOTE_USER 变量

    之前我使用IIS服务器作为PHP服务器 目前 它是apache 在 IIS 上我可以访问该变量 SERVER REMOTE USER 它返回用户名和域 例如域 用户 但安装 XAMPP 后此变量不可用 我应该怎么做才能再次获得这个变量 我的
  • 如何在java中找到2D ArrayList的列的唯一值?

    import java util ArrayList import java util Arrays import java util List import java util Map import java util Set impor
  • 在 C# 中使用全局热键捕获按键

    我有一个在后台运行的应用程序 就像我可以将我的应用程序保留在系统托盘中一样 如果它保留在系统托盘上 我的应用程序将完成它的工作 每当用户按下 F10 或 F9 时 就会完成一些工作 我试过这个 public partial class Fo
  • 未使用的indexeddb数据库是如何清理的

    我使用 IndexedDB 作为本地存储 并且运行良好 由于过于详细的原因 这里无法详细介绍 我经常只创建一个数据库并使用它 但在某些情况下 我需要创建更多数据库 在其中一些情况下 这些额外的数据库可能最终会 孤立 或未使用 并且将来不再需
  • ViewStub'父视图组

    该异常的含义是什么 ava lang IllegalStateException ViewStub 必须有一个非空 ViewGroup viewParent 我正在创建一个视图存根数组并将它们添加到线性布局中 但此异常在运行时显示 for
  • 将数组注释与指针一起使用

    我目前无法理解以下场景 我有一个多维字符串数组 我想仅使用指针来解决它 但在指针上使用数组注释时我总是遇到分段错误 这只是一个示例代码 我想在 pthread 中使用 3D 数组 因此我想通过结构将其作为指针传递 但它不起作用 我想知道为什
  • Three.js 支持波斯语/阿拉伯语文本

    我需要以波斯语 阿拉伯语显示一些文本 我加载了包含字符的字体 并使用 TextGeometry 在场景上创建文本 var loader new THREE FontLoader loader load B Zar Regular js fu
  • 反汇编 Microsoft Visual Studio 2003 编译器输出

    我发现 Microsoft Visual Studio 2003 工具输出的对象文件出现了奇怪的行为 这file实用程序告诉我 asmfile obj 80386 COFF executable not stripped version 3