You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查看进程中所有曾加载(含已卸载)的DLL?

查看进程中所有曾加载(含已卸载)的DLL的方法

由于无法实时挂钩,只能通过事后分析内存、系统日志或专用工具来追踪已卸载的DLL,以下是几种可行方案:

  • 分析进程完整内存转储

    1. 生成目标进程的完整内存dump:打开任务管理器,找到目标进程→右键→「创建转储文件」,转储完成后会给出文件路径。
    2. 用WinDbg加载该dump文件,执行以下命令:
      • !unloadedmodules:如果系统提前开启了卸载模块跟踪(需在注册表HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management添加TrackUnloadedModules DWORD值为1,重启生效),该命令会直接列出进程中已卸载的模块记录。
      • !vad:遍历进程的虚拟地址描述符,查找包含PE头特征的内存区域——即使DLL已卸载,部分未被回收的内存块可能仍残留DLL的标识信息。
      • !peb:查看进程环境块(PEB)的加载模块链表,部分已卸载但未完全清理的DLL可能还会留在链表的残留节点中。
  • 使用Process Hacker查看已卸载模块
    打开Process Hacker,找到目标进程→右键→「属性」→切换到「模块」标签页,勾选界面底部的「显示已卸载模块」选项,即可看到进程曾经加载过的所有DLL(包括已卸载的)。

  • 系统内存取证工具Volatility分析
    若能获取系统的完整内存dump,可使用Volatility工具扫描内存中的模块残留:

    • 执行volatility -f [系统dump路径] --profile=[对应系统版本] modscan:扫描内存中所有包含PE头的模块,即使已被卸载,只要内存未被覆盖就能被检测到。
    • 执行volatility -f [系统dump路径] --profile=[对应系统版本] dlllist:列出所有进程的当前加载模块,结合其他扫描结果交叉验证已卸载的DLL。
  • 检查系统事件日志
    部分场景下Windows会记录模块加载/卸载事件,可通过事件查看器或命令行查询:

    • 打开事件查看器→导航到「Windows日志」→「应用程序和服务日志」→「Microsoft」→「Windows」→「Diagnostics-Performance」→「Operational」,查找Event ID为100或与模块加载相关的事件。
    • 命令行查询:wevtutil qe Microsoft-Windows-Diagnostics-Performance/Operational /q:"*[System[EventID=100]]" /f:text,筛选出相关模块记录。

注意:所有方法都无法保证100%恢复所有已卸载的DLL,若DLL卸载后对应的内存区域被完全覆盖或回收,就无法追踪到相关信息。

内容的提问来源于stack exchange,提问作者qxseb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 17:42:41