1

我需要从 Windows BSOD 通过 C++ 生成的 memory.dmp 文件中读取信息、代码、标志、地址等。基本思想是可以从远程站点请求状态信息,并且请求的信息之一是机器上发生的最后一个 BSOD 的一些基本信息,因此我需要通过 C++ 打开内核/内存转储文件(我使用 MSVC 2005)。

4

2 回答 2

1

从这里开始,然后实现在 WinDBG 中使用脚本命令要容易得多。

注意:您只需要分析机器上的WinDBG,而不是崩溃的机器。您检索小型转储并在外部对其进行分析。您将遇到的唯一困难是获取正确的符号 - 对于 Windows,Microsoft 通过其符号服务器提供它们,但导致崩溃的应用程序可能无法提供您需要的正确符号。如果它们是您自己的导致崩溃的应用程序,请获取符号服务器并使用它。

于 2014-11-10T15:46:12.727 回答
0

我将配置 Windows 以创建小型内核内存转储,其中将包含您所追求的错误检查的参数。

在 XP 上是 64KB,在我的 Win8.1 x64 上是 256KB。这些文件压缩得很好。根据操作系统的位数,您应该能够使用 10-60KB 大小的 zip 文件。如果带宽对您来说最重要,您可以使用7z,它的压缩率比普通 zip 算法好 50%,但压缩时间要长得多(长 5-6 倍),但对于如此小的文件,CPU 时间差应该是无关的。

如果您不希望您的用户配置转储报告,您需要设置 DWORD

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl

到 3 以编程方式进行小型内核转储。

有关这些值的说明,请参阅http://technet.microsoft.com/en-us/library/cc976050.aspx

  • 0 调试信息未写入文件。
  • 1 将完整的故障转储写入文件。
  • 2 内核内存转储写入文件。
  • 3 将小内存转储写入文件。

然后,默认情况下,您将在 %SystemRoot%\MEMORY.DMP 中获得一个小的内核转储。

于 2014-11-10T17:38:03.517 回答