一、调试工具使用方式
- WinDbg常用命令:
- 执行 lm 命令,可以看到进程中有几个模块。
- 执行~命令列一下线程。
- 用!heap 命令列一下堆。
- 执行!address 命令可以列出用户态空间中的所有区域。
- 搜索吧!就从当前进程用户态空间的较低地址开始搜,找文章里的一句有特色的话:0:045> s -u 10000 L80000 “当年在交大”, 前几次尝试,什么都没找到,看来要扩大搜索范围:0:045> s -u 10000 L8000000 “当年在交大” ,延迟一刹那后,“刷刷”地出来很多结果。搜到了!这让人很高兴,说明数据还在内存里。
但是仔细看看搜索的结果后,又有点怀疑。因为 WinDbg 不支持中文显示,所以有点不确认上面搜到的信息。为了确认,执行 r 命令,观察 ESP 寄存器的值:0:043> r esp ,esp=02c9ffcc 。然后使用内存编辑命令在栈上输入上面的中文字符,再用内存观察命令查看,证实上面搜索到的结果是对的,5f53 就是“当”字的编码,4ea4 5927 就是“交大”。
- 接下来的目标是将数据从内存堆保存到文件,WinDbg 已经帮我们准备好了一条命令:0:045> .writemem c:\dumps\blog.txt 07288600 L2000。
- WinDbg –I可以将windbg设置为及时调试器,这样当Windwos下应用程序core以后可以立刻拉起来WinDbg分析问题。
- 在您提到的
.frame /c c
命令中,/c选项用于指定使用C调用的上下文,而c则表示当前帧。因此,这个命令的意思是切换到当前帧,并使用C调用的上下文来解释局部变量。这对于调试C语言程序非常有用,因为它允许您在C调用的上下文中查看和操作局部变量。 lm vm urlmon
命令可以查看指定的模块名称的详细信息。kn 100
查看当前线程的最高100层栈帧。