方法比较简单
但是可能是无效的,所以药做好心里准备
启动进程,然后WinDBG附加到进程,断下来
1:输入命令 !htrace -enable
告诉 WinDBG ,准备开始做句柄检测了
2:输入命令 !htrace -snapshot
告诉 WinDBG,创建一个句柄快照,以当前点为记住点做检测
3:程序放行
4:感觉差不多了,程序断下来
输入命令 !htrace -diff
WinDBG就开始比较句柄了
输入乱七八糟一堆调用栈,
运气好的话,可能会输出到程序关键字的调用栈,运气不好,就一个一个分析吧。
运气确实不好,但是之少可以看到是 CreateEventEx 函数创建的句柄。
且能看到线程ID,根据线程ID,去找线程入口点,
根据线程入口点,分析代码中的函数,
之少可以缩小范围吧。
(没有调用栈的原因很可能是我的程序是个Release 程序,开了优化,但是大多数的时候调试的都是优化过的)
!handle 只能看到句柄信息列表,想要分析每个句柄,这个功能有点难。