问题标签 [dumpbin]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1803 浏览

executable - windows如何显示进程的内存段?

我们有objdumpreadelfdubin等工具来显示可执行文件的内容。

但是当一个可执行文件被加载到内存中(创建一个进程)时,内存中的通常与可执行文件中不同。例如,在加载时,分配了两个额外的段,即堆栈(我们在这里忽略了页面映射的细节)。

是否有工具可以帮助显示进程的实时内存段/状态?

0 投票
2 回答
1066 浏览

c++ - Winbio.h 没有这样的文件或目录错误

我在从 msdn 编译本教程时遇到了一些困难:http: //msdn.microsoft.com/en-us/library/windows/desktop/ee207405 (v=vs.85).aspx 。如标题中所述,即使在 VS 2008 中链接使用 dumpbin 和 LIB 命令生成的 winbio.lib 后,我在编译时也得到 No such file or directory,这是代码:

0 投票
1 回答
1818 浏览

relocation - 重定位如何在 COFF 对象(不是图像)文件中工作

在创建最终图像之前解决目标文件中的重定位时,链接器究竟采取了哪些步骤?更具体地说,链接器如何处理已经存储在重定位站点的值?它是否总是将其添加到最终的 VA/RVA 中,还是有时会被忽略(例如某些重定位类型)?

我在MS PE/COFF Specfication中找不到明确的解释,经过一段时间的谷歌搜索和实验,我能找到的只是:

  1. 在 MS COFF 规范的第 5.6.2 章“基本重定位类型”中,据说“基本重定位将所有 32 位差异应用于偏移处的 32 位字段”,我猜这意味着重定位应该采取考虑到任何地址已经存储在指定的偏移量。但是,第 5.6 章(.reloc 部分)仅与图像文件相关,与目标文件无关。
  2. 在打印重定位表时,dumpbin 实用程序添加了一个名为“Applied To”的列,它似乎总是(无论重定位类型)包含存储在重定位站点的值。
  3. DJGPP COFF 规范中的重定位指令一章明确指出,当前存储在该位置的值应添加到重定位表条目所指向的符号地址。

您能否指出任何(相关)文档来解释链接器如何处理重定位?

0 投票
0 回答
180 浏览

c++ - 使用静态库的dubin /exports 编写头文件

我有一个静态库(.lib 文件)

我想在我的程序中静态链接和使用。但是我没有源代码,所以我需要自己编写头文件。

这是我的笨蛋 /exports 的结果

文件类型:图书馆

我试图编写一个头文件,以便可以使用这些函数(显示一个):

我已将库静态链接到我的程序,并尝试调用该函数openport,但我得到一个undefined reference to openport(char*)@4.

有谁知道如何写这个,所以这将正确链接?(或者这甚至是个好主意?)

编辑

我也跑了undname ?openport@@YGHPAD@Z,它返回:

取消装饰 :- "?openport@@YGHPAD@Z"

是:-“int __stdcall openport(char *)”

这可能意味着我无法正确链接。

0 投票
1 回答
1179 浏览

c++ - 转储箱导出输出中的@number 是什么

在带有 /EXPORTS 或 /IMPORTS 的 C++ .DLL(或 IMPLIB .LIB 文件)上使用DUMPBIN我在输出中看到如下语法:

我在任何地方都找不到@n指定含义的定义。我终于得出结论,这是参数数据的字节数,但根据几个示例的推断,这让我有点紧张。任何人都可以指出一个参考,或以任何权威说,这里的数字是什么意思?

0 投票
2 回答
1143 浏览

c - 生成正确的 .DEF 文件以导出非静态函数和 GLOBALS

在关于跨 dll 边界检测到全局变量的错误链接的问题之后,事实证明我需要修改 PostgreSQL 项目使用的 .DEF 文件生成器工具,以便它正确地DATA为全局变量的 .DEF 条目发出标签。

问题

我似乎无法找到一种方法,使用 Microsoft 的工具来获取区分全局变量和函数的符号表列表,其中包括未在其定义站点初始化的全局变量。

想法?

断流方法

该工具循环dumpbin /symbols输出以生成 .DEF 文件。与nm我习惯的不同,dumpbin /symbols似乎不会为每个符号发出一个条目来指示符号类型 - 函数、初始化变量、未初始化变量。它只显示符号是否在本地定义。

每个dumpbin输出行后跟.c文件中的相应定义,我们首先有一个初始化的全局:

与具有非静态链接的函数:

...并且为了获得额外的乐趣,未初始化的全局变量似乎显示为UNDEF,就像对来自其他编译单元的符号的引用一样,例如:

即使这是在编译期间在标头中预先声明的(为了便于阅读而扩展了项目特定的宏):

所以......看起来dumpbin输出不包含足够的信息来生成正确的.DEF文件。

现在gendefs.pl正在愉快地吐出一个.DEF文件,该文件省略了未初始化的全局变量,并将其他所有内容声明为代码(通过未能指定CONSTANTDATA在 .DEF 中)。对于如此破碎的东西,它工作得非常好。

修复它

为了生成正确的 .DEF 文件,我需要一种方法来确定哪些符号是变量。

我查看了 usingcl.exe/Fm选项,但它只是链接器选项的传递/MAP,当您只是生成一个目标文件而不是链接它时什么都不做。

我可以使用生成更多有用信息的符号转储工具,例如 gcc's nm.exe,但这会增加额外的工具依赖性并且看起来很脆弱。

在这一点上,我不能简单地用PGDLLIMPORT(项目使用的__declspec(dllimport)/__declspec(dllexport)宏)注释每个导出的函数并停止使用 DEF 文件。

即使我可以,我也需要找到一种PGDLLIMPORT在暴露变量上省略时会导致明显链接器错误的方法。

所以。Windows 链接器/编译器专家。有任何想法吗?

0 投票
0 回答
1006 浏览

c++ - 模块定义文件数据导出

我在 Visual Studio 2008 中使用模块定义文件 (.def) 来选择性地导出符号以生成导入库。根据MSDN上的文档,在符号名称之后添加关键字DATA(或CONSTANT)允许创建数据声明。关于这一点,我遇到了一些问题。如果有人能对下面概述的问题有所了解,我将不胜感激。

考虑上面的代码。我希望导出变量xml以便可以在 dll 边界上使用它。当链接到生成的导入库时,它会请求以下符号。

“公共:静态类分配器 * MemoryService::xml” (?xml@MemoryService@@2PAVAllocator@@A)

当符号添加到没有DATA关键字的模块定义文件时,它会识别符号,但使用变量的代码会崩溃。链接到将符号注释为DATA的导入库无法识别该符号,而是给出(未解析的符号)链接器错误。

'dumpbin /exports'但是列出如下所示的输出。生成的导入库显然确实导出了有问题的名称。

链接器无法识别符号是否有原因?是否有任何可能的修改可以允许图示代码工作?

0 投票
2 回答
934 浏览

c++ - 反汇编的二进制文件中的HIGHLOW是什么意思?

我刚刚第一次使用 DUMPBIN,我在输出文件中反复看到术语 HIGHLOW:

我很好奇这个词代表什么。我在 Google 或 Stackoverflow 上没有找到任何关于它的信息。

0 投票
1 回答
1859 浏览

c++ - 在 dll 中找不到修饰函数名

我在 Visual Studio 2013 中创建了一个 dll 项目

在此处输入图像描述

编译后,我运行

通过dll所在目录下的cmd.exe,但我只得到摘要

在此处输入图像描述

我跑了

(使用文本输出选项)但我在输出中找不到修饰函数名称(我搜索了它intgetSomeNum它应该是输出转储中修饰名称的一部分)。

我也尝试在VS2013中找到一种方法将/FAs输入到编译器选项中,但是我无法在项目的C/C++属性页中找到编译器选项。

对于识别装饰函数名称的任何帮助,我将不胜感激。

编辑:感谢指针,小丑。我已经修改了原始代码

在此处输入图像描述

但是,在重新编译后,bumpbin 仍然没有显示任何修饰名称(使用 /symbols 选项)。

0 投票
1 回答
8065 浏览

windows - 检查运行时静态库或 dll 使用什么

Windows SDK 中是否有工具可以检查库使用的 CRT?例如我有一个 *.lib 文件,如何检查它是用 /MDd 标志还是 /MT 编译的?还如何检查 dll 或 exe 是否相同?这可以用垃圾箱完成吗?