Windows 关于内存转储的问题

Windows 关于内存转储的问题,windows,windbg,crash-dumps,minidump,Windows,Windbg,Crash Dumps,Minidump,我目前正在尝试设计一个内存转储工具,可以从另一个进程获取崩溃进程的内存转储。但我对这一点完全陌生,我想借此机会对内存转储技术有一个坚实的了解 我想知道为崩溃进程创建内存转储的工作模式。我目前的疯狂想象如下: 当进程崩溃时,操作系统将始终知道这一点(我不知道如何实现,但它应该能够做到)。然后,操作系统启动了某种机制,将崩溃进程的虚拟地址空间的内容复制到所谓的转储文件中。然后我们可以使用WinDbg调试转储文件 我想知道,如果我们能将崩溃进程的整个虚拟地址空间复制到转储文件中,文件会不会太大?或者我

我目前正在尝试设计一个内存转储工具,可以从另一个进程获取崩溃进程的内存转储。但我对这一点完全陌生,我想借此机会对内存转储技术有一个坚实的了解

我想知道为崩溃进程创建内存转储的工作模式。我目前的疯狂想象如下:

当进程崩溃时,操作系统将始终知道这一点(我不知道如何实现,但它应该能够做到)。然后,操作系统启动了某种机制,将崩溃进程的虚拟地址空间的内容复制到所谓的转储文件中。然后我们可以使用WinDbg调试转储文件

我想知道,如果我们能将崩溃进程的整个虚拟地址空间复制到转储文件中,文件会不会太大?或者我们可以指定转储哪个虚拟地址空间(内核/用户)

有谁能为我提供一些参考资料,特别是在以下方面:

  • 什么是内存转储

  • 如果有所谓的内核转储和用户模式转储,它们是什么

  • 在windows平台上,我需要什么API?这些职能是否相关

  • 当操作系统检测到某个进程崩溃时,我是否可以监视任何信号,以便通知我的转储工具开始转储

  • 谢谢你花时间看我的话


    地址1: (5) 什么是迷你转储?它与内核/用户模式转储有何关系

    (6) 当我们谈论内存转储时,我们谈论的是哪个内存?虚拟内存还是物理内存?由此看来,我认为应该是物理内存

    地址2: 我刚刚发现了一个使用DbgHelp.dll中包含的API编写小型转储的好方法。我想和大家分享一下。如果你能提供其他与此相关的好资料,你介意分享吗?谢谢


    (顺便说一句:我会不断更新我的进度。任何评论都将不胜感激。)

    为什么你自己这么做?已经有很多工具可以做到这一点。包括adplus和来自sysinternals的都可以做到这一点。它们都支持丰富的选择,并经过了彻底的测试。两者都是免费的

    至于你的其他问题:

    1) 内存转储是给定进程的内存空间转储。存在具有不同详细级别的各种转储。WinDbg的帮助文件包含所有详细信息

    2) 对于用户应用程序,您不需要内核转储。内核转储用于调试内核模式代码,即驱动程序和操作系统本身

    3)您可以使用dggun.dl(在Windows的调试工具中)创建用户模式转储,但正如我所说的,您应该首先考虑现有的工具。


    4) Windows使用结构化异常处理,因此崩溃基本上是未处理的异常。调试器可以收到第一次和第二次机会异常的通知,以便在引发异常以及没有可用的异常处理程序时创建转储

    我喜欢你对Windows内部工作的兴趣,但出于好奇:为什么你想创建一个没有内核调试经验的内存转储工具?为什么你想用现成的替代品来创建你自己的工具?我脑海中浮现的是:SysDump或你提到的WindBg是兴趣驱使我前进,永远。;)