https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugger/example-9---detecting-a-pool-memory-leak
使用追加符号 (>>) 将 PoolMon 输出重定向到日志文件。 稍后,你可以检查日志文件中的池大小趋势。 例如:
poolmon.exe /b >> poolmon.log
https://developer.aliyun.com/article/765818
1.下载windows driver kit并安装
https://docs.microsoft.com/zh-cn/windows-hardware/drivers/download-the-wdk
2.默认 poolmon 的路径是 C:\Program Files(x86)\Windows Kits\10\Tools\x64
或C:\ProgramFiles (x86)\Windows Kits\10\Tools\x86
3.运行如下命令:
cd <poolmon.exe 的路径>
poolmon -u -n c:\1.txt4.查看1.txt, 在Bytes 这列找到占用pool 最高的tag
5.之后查找tag 对应的组件。
右击cmd, 选择以管理员身份运行以下命令行:
c:
cd\
findstr /m /l /s Leak*.sys (标黄部分换成具体tag)
6.根据查到的组件找到对应的应用,建议升级或临时卸载。
https://blog.51cto.com/xjsunjie/382160
这个工具可以监视内存中总共使用的页面数和非页面的"内存池",以探测内存中有无"空洞"存在.内存中的所谓"空洞"是指:本来可供使用、但实际上并未使用的区域.减少空洞可以提高内存的使用效率,防止内存的浪费.与使用别的命令行程序不同,这个程序需要在加载运行之后才可以得到"在线"的提示帮助信息.另外,这个工具还需要一个叫做gflags的程序来配合,更麻烦的是程序gflags也像前面介绍的有些程序一样,具有适应两种环境的版本.这种互相交叉的用法使得不熟悉它们相互关系的人感到眼花缭乱.下面结合Poolmon.exe的使用,对二者都先介绍命令行的版本.
1、 在使用Poolmon.exe之前,必须先运行gflags.可以在“开始->运行”中键入cmd,点击确定打开命令行窗口,(注意:本文中所有命令行程序都可以先用cmd打开一个类似dos模式的窗口),然后在窗口中键入命令和参数,执行该命令行程序:gflags -r +ptg 参数的含义到介绍gflags的GUI版本时再解释.
2、 执行后重新启动计算机.
3、 重新启动成功后,即可在命令行中执行 poolmon
[popexizhi:
关于poolmon的tag问题
本来是打算用安装后和卸载后diff获得tag对比的,结果卸载程序后驱动还在poolmon中,还是和开发人员直接要吧!
另外这个tag用 findstr可以在二进制中搜索到,是明文字符。
]
參考:https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugger/using-poolmon-to-find-a-kernel-mode-memory-leak
在 Windows 2000 和 Windows XP 上,必须先使用 GFlags 来启用池标记。 GFlags 包含在 Windows 调试工具中。 启动 GFlags,选择 " 系统注册表 " 选项卡,选中 " 启用池标记 " 框,然后选择 " 应用"。 您必须重新启动 Windows 才能使此设置生效。 有关更多详细信息,请参阅 GFlags。
在 Windows Server 2003 和更高版本的 Windows 上,始终启用池标记