【问题标题】:how to list all the DLLs ever loaded by a process even those that were loaded and unloaded before I started monitoring the process如何列出进程曾经加载的所有 DLL,甚至是在我开始监视进程之前加载和卸载的 DLL
【发布时间】:2018-07-18 10:27:43
【问题描述】:

我需要找出一个进程曾经加载的所有 DLL,包括在我监视它时已卸载的那些。 我知道有很多工具可以解决这个问题,例如 listdlls,但它们只告诉当前加载的那些 - 而不是那些在我开始监视它之前 已经卸载的。

我想要一份完整的 DLL 列表,这些 DLL 已加载和卸载到监控点。

【问题讨论】:

  • Depends.exe 具有配置文件模式。这够了吗?
  • 如果 dll 已经卸载 - 你不会得到关于这个的信息。它没有存储
  • docs.microsoft.com/en-us/windows/desktop/DevNotes/… - Windows 在 NTDLL.DLL 内部存储最后 64 个卸载的模块。不确定它是否仅适用于已调试的进程。 WinDbg 依赖它。
  • @xMRi depends.exe 只告诉静态依赖而不是运行时依赖。
  • @ImmortaleVBR 这可能会很有用。谢谢。

标签: windows winapi dll process


【解决方案1】:

有关卸载模块的信息不存在于系统中的任何位置。如果您需要一个完整的列表,列出曾经加载到您的流程中的所有模块,您将不得不监控您的流程的整个生命周期。您可以使用Debugger Engine API 来监控模块加载和卸载事件。

【讨论】:

  • 我不知道卸载的模块名称没有存储在任何地方。但是,@immortale VBR 的评论提出了一些可能对我有帮助的建议。使用 Debugger Engine API 似乎有点过头了,因为我想要一些现成的工具来提供这些信息。
  • @AnuragSSharma:不支持的RtlGetUnloadEventTrace 调用最多只能返回 64 个未加载的模块。使用 MiniDumpWriteDump 传递 MiniDumpWithUnloadedModules 标志时也是如此。如果您需要关于所有个已卸载模块的信息,您将不得不监控您的进程的整个生命周期。
猜你喜欢
  • 1970-01-01
  • 2011-07-30
  • 1970-01-01
  • 1970-01-01
  • 2012-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多