1、打开将要被检测的软件A,同时打开windbg
2、windbg,File->attach to process ,附加到进程A
3、F5运行或DEBUG->GO
4、等待进程A进入死锁状态,然后DEBUG->Break,在下面的输入栏中输入 ~*kb,然后查看各线程信息,分析死锁原因
PS: 常用命令
0、!analyze -v 分析
1、清屏:.cls(注意前面有个 . 号)
2、d
命令显示esp寄存器指向的内存
如下
用dd命令直接指定054efc14地址
3、~ 用来切换目标线程:~显示线程信息;~0s把当前线程切换到0号线程
4、~* 列出当前进程中所有线程的详细信息
5、k 显示当前线程的堆栈
6、~*kb 显示当前进程所有线程的堆栈,同理~1kb显示一号线程堆栈
7、使用!locks命令列出当前被锁住的资源
8、
!cs Address 指定要显示的临界区地址。如果省略该参数,调试器显示当前进程中所有临界区。
0614fd4c 7c92df5a 7c939b23 00000604 00000000 ntdll!KiFastSystemCallRet
0614fd50 7c939b23 00000604 00000000 00000000 ntdll!NtWaitForSingleObject+0xc
0614fdd8 7c921046 0012fe08 5f401b5f 0012fe08 ntdll!RtlpWaitForCriticalSection+0x132
这里的第一个是ebp,第二个是返回函数地址,接下来才是你的参数。
具体要看handle是多少,要看下比如 ntdll!NtWaitForSingleObject参数定