我目前正在尝试设计一个内存转储工具,可以从另一个进程获取崩溃进程的内存转储。但我对此完全陌生,我想借此机会深入了解内存转储技术。
我想知道为崩溃的进程创建内存转储的工作范例。我现在的疯狂想象如下:
当一个进程崩溃时,操作系统总是会知道(我不知道怎么做,但它应该能够)。然后操作系统启动了某种机制,将崩溃进程的虚拟地址空间的内容复制到所谓的转储文件中。然后我们可以使用 WinDbg 来调试转储文件。
我在想,如果我们可以将崩溃进程的整个虚拟地址空间复制到转储文件中,文件会不会太大?或者我们可以指定转储哪个虚拟地址空间(内核/用户)?
任何人都可以为我提供一些参考,特别是在以下方面:
什么是内存转储?
如果有所谓的内核转储和用户模式转储,它们是什么?
在 Windows 平台上,我需要哪些 API?MiniDumpWriteDump()等函数是否相关?
当操作系统检测到某个进程崩溃时,是否有任何信号可以监控,以便通知我的转储工具开始转储?
感谢您花时间看我的话。
添加1:
(5) 什么是小型转储?它与内核/用户模式转储有何关系?
(6)当我们谈论内存转储时,我们指的是哪个内存?虚拟内存还是物理内存?从这张图来看,我认为应该是物理内存。
添加2:
我刚刚找到了关于使用 DbgHelp.dll 中包含的 API 编写 MiniDump的一个很好的参考。我想分享它。如果你能提供其他与此相关的好材料,你介意分享一下吗?谢谢。
(顺便说一句:我会根据我的进展不断更新这个线程。任何评论将不胜感激。)