0x00
首先使用 gflags 设置heap堆栈追踪参数:
Gflags.exe /i +ust
设置完成后后,我们可以在
“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options<Image Name>” GlobalFlag 中看到刚才设置的参数。
设置完不需要重启机器,直接启动需要跟踪的exe。
对于需要跟踪的exe可以使用windbg live调试或者dump调试。
0x01
使用 !heap –s 获取堆分配的情况,找到可疑的堆。
使用 !heap –stat –h ,获取特定堆各种size分配的block数量。注意,这里的heap handle就是 !heap –s 获取的第一列参数,实际上就是 _HEAP 的地址
这里我们随便找一个堆分析。
接下来,我们假设大小为 10ada0出现泄漏(一般是整体占比比较大的size在泄漏)。我们对这个size进行分析:
注意,这个命令会查找系统中所有堆的分配情况,所以列出的条目可能不只有你需要查看的堆。具体这个条目在不在需要分配的堆上,可以查看 _HEAP @ 字段。
接下来,我们检查当前条目的分配堆栈,这里需要用到 User