在哪里可以找到卸载模块的Windows进程列表?(Where do I find the list

2019-08-01 11:23发布

我有一些本机(如/SUBSYSTEM:NATIVE )的Windows程序,我想生成的情况下,他们崩溃小型转储。 通常情况下,我会使用dbghelp.dll ,但由于本机进程只能使用来自导出的函数ntdll.dll ,我不能。

所以,我已经实现了自己的自卸车。 这几乎是做了,但不幸的是,我一直无法找到在坠毁过程中卸载模块列表(名单肯定是存储某个地方,因为WinDbg的是能够显示它)。

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

编辑:该列表肯定要存储在进程的内存,可以WinDbg中显示列表,即使我将其附加模块被卸下后。 还有在一份报告中的WinDbg的文档 :

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

Answer 1:

见RtlGetUnloadEventTrace和RtlGetUnloadEventTraceEx 。

我不能完全肯定它是如何工作的,但我相信实际的名单是由在加载程序代码存储ntdll.dll中。 它跟踪的16(或64,根据MSDN)中的具体过程无负载最后的DLL。 该信息不是从PEB或PEB_LDR_DATA链接。



Answer 2:

如果你需要它只是为本地进程,这是没有必要找列表,如本机进程无法加载任何DLL,所以没有任何卸载。 不过从技术上看我很好奇在哪里位于过程卸载数据。



Answer 3:

WinDbg的可能只是创建列表本身。 Windows中的调试器将得到模块加载并作为程序执行卸载事件。 因此,一个调试器将只需要观察这些事件,并更新列表,因为它去。

请参阅: http://msdn.microsoft.com/en-us/library/ms679308%28VS.85%29.aspx

特别地约零件UNLOAD_DLL_DEBUG_INFOLOAD_DLL_DEBUG_INFO

我建议你这样做的,我不知道它跟踪卸载模块的任何内部列表中,毕竟操作系统本身有该类型的数据,没有必要。



Answer 4:

我会大胆地猜测它在exe文件的导入表中所列的模块,以及当前加载的模块之间的差别。



文章来源: Where do I find the list of unloaded modules in a Windows process?