如何使用C ++读取windows BSOD生成的memory.dmp

时间:2014-11-10 15:24:30

标签: c++ windows bsod

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

2 个答案:

答案 0 :(得分:1)

Start here,然后意识到在WinDBG中使用脚本命令要容易得多。

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

答案 1 :(得分:0)

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

在XP上,我的Win8.1 x64为64KB,为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中获得一个小型内核转储。