问题标签 [dbghelp]

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 回答
113 浏览

debugging - 使用 SymLoadModuleExW 加载多个模块

我正在尝试使用以下代码加载几个符号模块:

dwBaseDllSymLocal 现在是 10000000。

Dbghelp 给出以下消息: module1 is already loaded at 10000000 .

当我尝试两次加载相同的模块时,会发生相同的行为。(与函数文档中所写的不同)。

最后一个错误ERROR_INVALID_ADDRESS虽然看起来并不相关,因为最后一个错误在第一次成功的函数调用之后也有这个值。

是否可以加载多个模块SymLoadModuleExW?这样做的正确方法是什么?

0 投票
0 回答
175 浏览

c - 获取系统 DLL 导出函数的签名

如何获得 DLL 导出函数的签名?我知道这是可能的,因为诸如 IDA(和 ollydbg)之类的程序分析工具设法获得以下信息GetVersionExA

使用十六进制编辑器搜索 PDB,我找不到字符串lpVersionInformation。那么我在哪里以及如何提取签名呢?

0 投票
0 回答
124 浏览

debugging - SYMBOL_INFO 的地址字段总是 0?

我试图用来SymGetLineFromAddr64获取从 PDB 加载的符号的源文件名。我加载 PDB 模块并枚举类型/符号,但我在枚举回调中获得Address的指针字段SYMBOL_INFO始终为 0,因此我无法使用它来获取源文件信息。(SymGetLineFromAddr64失败并显示error code 126 “找不到指定的模块。”)

我也尝试使用该TI_GET_ADDRESS属性,SymInfo->Index但它也是 0。

这是我的main

这是枚举器:

使用 VS2015 社区版编译,X64 调试模式,/Zi调试信息格式和“调试优化”(/DEBUG)。

请注意,我正在为正在运行的同一可执行文件加载 PDB。我认为这不是问题,因为我可以很好地加载其他类型信息。我还尝试检查另一个 PDB,地址也是 0。

问题:为什么我在地址字段中得到 0 以及如何实际获得正确的地址以便我可以检索特定类型/标签的源文件?很确定我在这里遗漏了一些明显的东西。

谢谢你的帮助。

0 投票
0 回答
78 浏览

windows - PDB信息查询不一致(SymEnumSymbols)

我正面临 DbGHelp API 的奇怪行为,我什至找不到解释理论。我有一些 PDB 文件(用于 DLL;从 Internet 下载),我正在寻找 PDB 文件中的特定符号。我尝试了四种选择:

  1. 一个全新的TYPEINFODUMP预建下载副本;
  2. 一年半前我自己下载并构建的TYPEINGODUMP副本(在 Windows 8.1 上使用 Visual Studio 10 和 Windows SDK 7.0 构建);
  3. 与 #2 相同的源,但现在重新构建(Windows 10 与 Visual Studion 10 和 Windows SDK 7.0);
  4. 我自己的代码:一个非常简单的 SymInitialize()、SymLoadModule64() 和 SymEnumSymbols() 序列(在 Windows 10 上使用 Visual Studion 10 和 Windows SDK 7.0 构建)。

所有这些选项都在 Windows 10 上使用,除了选项 #1(它自带 dbghelp.dll 版本 6.3.0017.0 的副本)之外,所有这些选项都加载了相同的 dbghelp.dll(选中;10.0.14321.1024)。

现在,在所有情况下都可以找到所需的符号。然而,选项 #1、#3 和 #4 报告此符号的 TypeIndex=0、Size=0 和 Tag=SymTagPublicSymbol,这是不正确的。只有选项 #2 报告 TypeIndex=2、Size=295 和 Tag=SymTagFunction 的符号,这确实是正确的。我所有使用编译的代码(我的或不是我的)获取正确符号信息的尝试现在都以失败告终。只有我前段时间构建的 TYPEINFODUMP 才能带来正确的结果。我完全绝望了。这种情况有什么合乎逻辑的解释吗?我可能会错过什么?

0 投票
0 回答
90 浏览

c - DbgHelp 枚举局部变量

我正在尝试使用 DbgHelp 枚举函数中的所有变量。我面临的唯一问题SymEnumSymbols是范围有限,因此例如在 if 语句中找不到变量。我知道SymSetContext,但这需要我知道范围存在的地址范围。DbgHelp 是否提供枚举函数中范围的任何方式?或者其他枚举局部变量的方法?

0 投票
0 回答
105 浏览

winapi - 生成我自己的 Windows DbgHelp MiniDump。我不需要分发 PDB 文件,对吗?

我需要仔细检查我对 DbgHelp 和故障转储的理解。

为了应对我的 Windows 应用程序在现场遇到的一些崩溃,我编写了一个 UnhandledExceptionFilter,它使用 MiniDumpWriteDump 函数(来自 DbgHelp.dll)来写出一个 .DMP 文件。它似乎运行良好,即使发生崩溃时客户端没有 PDB(只要我在打开转储文件时拥有它们),我似乎也可以看到完整的崩溃信息

我只是希望得到确认。我是否需要分发 PDB?如果我不分发它们,是否有一些信息可能无法从客户端崩溃中获取到 DMP 文件中?

0 投票
0 回答
62 浏览

c - 来自 dbghelp 的“SymEnumSymbols”回调中的“symbolSize”参数是什么?

我正在使用库中的symEnumSymbol函数dbghelp来获取有关malloc可执行文件中任何符号的详细信息。我需要传递的参数之一是具有以下签名的回调函数:

我想从这些参数中提取所有数据。

Windows 开发中心提供了关于第二个不充分的描述:

SymbolSize:符号的大小,以字节为单位。大小是计算出来的,实际上是一个猜测。在某些情况下,该值可以为零。

我通过以下方式实现了回调:

SymEnumSymbols用这些论点打电话:

我得到了这个输出:[编辑:我刚刚添加了枚举free]

如您所见,第一次malloc符号大小为 16,第二次为 32。我不确定我是如何得到两个malloc的,因为我的可执行文件应该只有一个(我写了源代码)但假设另一个一个来自编译器或其他东西 - 这些尺寸是多少?为什么它们不同?!

我可以猜到它指定了 32 位命令或 16 位命令,但我真的没有线索,这对free结果没有意义。谢谢你的帮助!

0 投票
1 回答
111 浏览

python - SymInitialize python

SymInitialize returns 0

GetLastError returns -1073741813

What I'm doing wrong, same code written in C++ works just fine.

0 投票
1 回答
131 浏览

winapi - 在 dbghelp.h 的上下文中,“内联”是什么意思?

文档SymEnumSymbolsEx()内容如下:

什么是“内联符号”?SymFromInlineContext和其他内联程序做什么?

0 投票
0 回答
562 浏览

c - 如何修复 SymFromAddr 返回的 ERROR_INVALID_ADDRESS(错误 487)

我正在尝试按地址获取函数名称。

我正在使用 VS Community 2019,我的第一步是复制您可以在以下位置找到的 Microsoft 示例:
https ://docs.microsoft.com/en-us/windows/desktop/debug/initializing-the-symbol-handler
https ://docs.microsoft.com/en-us/windows/desktop/debug/retrieving-symbol-information-by-address

但是这段代码总是打印“SymFromAddr 返回错误:487”......
我想我做错了什么。
你能帮我吗?

谢谢,
阿尔贝托