问题标签 [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 回答
135 浏览

visual-c++ - 如何在编译时检测 DbgHelp 的版本?

DbgHelp的参考手册很好地列出了所有版本以及它们引入的更改。如何在编译时检测版本?

0 投票
2 回答
879 浏览

windows - 调试 (Win):DIA 与 DBGHELP

简明扼要:

DIA(调试接口访问)和 DBGHELP 库之间的实际区别是什么?我知道 DIA 是基于 COM 的,并且似乎非常强大(并且能够与托管和非托管进程一起使用),而 DBGHELP 似乎使用起来非常方便,但提供的可能性较小。

任何人都可以解释这两者在哪里有它们的区别,以及可以用一个做什么而不用另一个做什么?我真的很难在互联网上找到一些完整的结论性信息:(

抱歉,如果这似乎是一个无聊的问题,感谢您为我提供的任何答案!:)

问候 PuerNoctis

0 投票
1 回答
247 浏览

dbghelp - 如何并排存储调试符号和二进制文件

最近我注意到,当使用 SymChk 从 Microsoft 符号存储下载符号时,它会带来 DLL 和 PDB。我想知道是否可以使用标准的微软工具(如 SymChk/SymStore)来存储二进制文件和符号?

0 投票
1 回答
408 浏览

windows - Windows PDB 文件包含相同地址的多个符号?

可能重复:
为什么两个函数打印相同的地址?

我正在为处理它们的应用程序使用 PDB 符号文件(通过 DbgHelp API)。我遇到了一个奇怪的问题,即 PDB 文件将包含同一地址的多个不同公共符号条目!

例如,在 Windows 7 (x64) 上使用 kernel32.dll (wow64) 的最新 Microsoft PDB 文件,我们可以转储以下信息并查看相同地址 0x10b1a6e 的 31 个不同条目:

上面的示例是包含重复的许多地址之一。通常在任何地址都有一个符号条目。对同一个地址 AFAIK 有多个符号条目根本没有意义!

任何人都可以启发我:

  • 为什么会这样?

  • 这些重复的条目可以解析到唯一的位置吗?

谢谢。

0 投票
1 回答
1367 浏览

c++ - .pdb中的函数地址与.exe不同,为什么?

我通过 SymEnumSymbols 从 .pdb 文件中读取了主函数的地址,值为 0x0100116e0

但是这个函数在VS2008的解密码中的地址是004116E0

然后我尝试通过将 2 个不同的地址传递给 SymGetSymFromAddr64 来验证结果,我得到了相同的函数符号,唯一的区别是 PIMAGEHLP_SYMBOL64 的地址成员,一个是 100116e0,另一个是 4116E0。我也试过用微软的 dbh.exe 验证一下,命令是

我的 main 函数的地址在 TestsymbolLookup.exe 中是唯一的,但为什么我得到 2 个不同的答案???

0 投票
1 回答
2545 浏览

delphi - 如何在 EExternal 异常期间获取 EXCEPTION_POINTERS?

我如何获得EXCEPTION_POINTERS,即两者:

  • PEXCEPTION_RECORD
  • PCONTEXT

EExternal异常期间的数据?

背景

当 Windows 抛出异常时,它会传递一个PEXCEPTION_POINTERS; 指向异常信息的指针:

Delphi向我抛出EExternal异常时,它只包含一半的信息,PEXCEPTION_RECORD唯一的:

EExternal异常期间,我如何同时获得两者?

示例用法

我正在尝试使用MiniDumpWriteDumpDelphi 的函数编写一个 Minidump。

该函数有几个可选参数:

在基本层面上,我可以省略三个可选参数:

它成功了。缺点是小型转储缺少异常信息。该信息(可选)使用第四个miniExceptionInfo参数传递:

这很好,除非我需要一种方法来在EXCEPTION_POINTERS发生异常时获取 Windows 提供的信息。

TExceptionPointers结构包含两个成员:

我知道 Delphi 的EExternal异常是所有“Windows”异常的基础,它包含所需的PExceptionRecord

但它不包含关联的ContextRecord.

PEXCEPTION_RECORD不够好吗?

如果我尝试传递EXCEPTION_POINTERSto MiniDumpWriteDump,留下ContextRecord零:

然后函数失败并出现错误0x8007021B

仅完成了 ReadProcessMemory 或 WriteProcessMemory 请求的一部分

怎么样SetUnhandledExceptionFilter

你为什么不直接使用SetUnhandledExceptionFilter并获得你需要的指针呢?

问题在于未过滤的异常处理程序仅在异常未过滤时才会启动。因为这是 Delphi,而且因为我处理了异常:

该应用程序不会,我也不希望它因 WER 故障而终止。

我如何EXCEPTION_POINTERS在一个期间获得EExternal

注意:您可以忽略从背景开始的所有内容。它是不必要的填充物,旨在让我看起来更聪明。

先发制人的尖刻 Heffernan 评论:你应该停止使用 Delphi 5。

奖金阅读

0 投票
1 回答
224 浏览

windows - 未修饰的 Microsoft 符号:SomeClass::`vftable'{for `Foo::Bar'}

我正在使用UnDecorateSymbolNameWdbghelp 来取消装饰 Microsoft 符号名称。当用 取消装饰时UNDNAME_COMPLETE,符号名称有时可以有,我理解的是,一些编译器附加了信息。例如,一个 vftable 符号有时可以有一个大括号块,其中包含一个for关键字,后跟一个类/接口名称,例如

SomeClass::'vftable'{for 'Foo::Bar'}

谁能告诉我"{for 'Foo::Bar'}"名字的一部分是什么意思?

此外,是否有人知道有关此的一些文档,所以我可以阅读,因为我找不到任何东西。

非常感谢!

0 投票
1 回答
5029 浏览

debugging - 如何在 OlyDbg 中启用 Microsoft 符号服务器?

OlyDbg 第 2 版最近发布。它现在支持使用 Microsoft 符号服务器进行调试:

它通过 dbghelp.dll 支持 Microsoft 编译器。新功能是对符号服务器、使用 dbghelp 的堆栈遍历和过程参数名称的支持。

如何让 OlyDbg 使用 Microsoft 符号服务器?

你试过什么?

在此处输入图像描述

长答案:

  • 我已将 OlyDbg 指向 DbgHelp.dll 下载符号后将包含符号的文件夹
  • 我已经告诉 OlyDbg 可以访问 Microsoft 符号服务器
  • 我告诉 OlyDbg 可以使用 DbgHelp.dll
  • 我已尝试将 OlyDbg 2.0 随附的 DbgHelp.dll 版本(2008 年)更新为 Windows 8 SDK 随附的版本
  • 我设置了一个系统环境变量:

    /li>
  • 我已将OlyDbg 应搜索的“目录”SRV*d:\Symbols*http://msdl.microsoft.com/download/symbols添加为YouTube 视频

    在此处输入图像描述

是什么让你认为它不起作用?

  • a) 符号目录为空
  • b) msdl.microsoft.com 没有互联网流量
  • c) OlyDbg 2.0 中没有符号出现

    在此处输入图像描述

也可以看看

0 投票
1 回答
2591 浏览

winapi - Windows 损坏的小型转储

当我的程序崩溃时,它会从未处理的异常处理程序中创建一个小型转储。我遇到的问题是人们向我发送故障转储,但是当我尝试在 Visual Studio 2010 中打开它们时,它说它们已损坏(“转储文件的格式无效”)。我没有分发dbghelp.dll我的程序,我需要吗?我假设如果是版本问题,Visual Studio 会让我知道并且不会输出上述消息。

我用来生成日志的代码是

0 投票
2 回答
3792 浏览

debugging - 如何使用 DbgHelp 访问转储中的 PEB(进程环境块)

我找到了一个使用调试器引擎 API 在转储中获取 PEB的示例。这可以使用 DbgHelp 吗?拥有使用 DbgHelp 提取注释和异常信息的现有代码。如果可能的话,想从 PEB 获取一些信息。