在哪里可以找到Windows进程中已卸载模块的列表?

ava*_*kar 6 c++ windows dbghelp

我有一些原生的(如在/SUBSYSTEM:NATIVE)Windows程序,我想生成minidumps以防万一他们崩溃.通常,我会使用dbghelp.dll,但由于本机进程只能使用从中导出的函数ntdll.dll,所以我不能.

所以我自己实施了自卸车.它差不多完成了,但不幸的是,我一直无法在崩溃的进程中找到卸载的模块列表(列表肯定存储在某个地方,因为WinDbg能够显示它).

在哪里可以找到Windows进程中已卸载模块的列表?

编辑:列表肯定存储在进程内存中的某个位置,即使我在卸载模块后附加它,WinDbg也可以显示列表.WinDbg的文档中还有一个注释:

Microsoft Windows Server 2003和更高版本的Windows维护用户模式进程的卸载模块列表.[...]

Fil*_*ara 5

请参阅RtlGetUnloadEventTraceRtlGetUnloadEventTraceEx

我不完全确定它是如何工作的,但我相信实际的列表是由 ntdll.dll 存储在加载程序代码中的。它跟踪特定进程中最后卸载的 16 个(或 64 个,根据 MSDN)DLL。该信息不与 PEB 或 PEB_LDR_DATA 链接。