我的asp.net应用程序被绞死了。所以我抓了一个转储文件。我发布了一个问题here。 现在在这篇新帖子中,我想找出锁定句柄。
0:177> kb 5
RetAddr : Args to Child : Call Site
000007fe`fda11430 : 00000001`012f8bb8 00000000`00000000 000007fe`f1651000 000007fe`f1f00d1f : ntdll!NtWaitForMultipleObjects+0xa
00000000`77851723 : 00000000`0d67b0f8 00000000`0d67b0f0 00000000`00000000 00000000`0d67af50 : KERNELBASE!WaitForMultipleObjectsEx+0xe8
000007fe`fa2f0f15 : 00000000`00000000 00000000`00000000 00000000`0763d720 00000000`00000001 : kernel32!WaitForMultipleObjectsExImplementation+0xb3
000007fe`fa2f0cee : 00000000`00000001 00000000`0763d8e8 00000000`00000001 00000000`0763d8e8 : clr!WaitForMultipleObjectsEx_SO_TOLERANT+0x91
000007fe`fa2f0b79 : 00000000`00000000 00000000`0d67b2c9 00000000`0763d720 00000000`0d67b4c8 : clr!Thread::DoAppropriateAptStateWait+0x56
堆栈跟踪在上面发布。从here和here,我学会了如何尝试找到句柄,但我有一些障碍: 1)kb命令显示前三个参数。但我看到有四个参数被空间分割。
00000000`0d67b0f8 00000000`0d67b0f0 00000000`00000000 00000000`0d67af50
我陷入困境,不知道哪个参数是句柄,哪个参数代表句柄长度。
支持句柄为00000000 0d67b0f0, and the length is 00000000
0d67b0f8。如果我输入
dd 00000000`0d67b0f0 L?00000000`0d67b0f8
这个输出会显示句柄地址吗? 我试着输入命令,但输出太长了。我找不到句柄地址。 我试过了
dd 00000000`0d67b0f0 L1
但是,也找不到手柄。
有人可以帮助我吗? 提前谢谢!
答案 0 :(得分:1)
length
显然不能是000000000d67b0f8,这太过分了。你也在看错了功能。我不知道KERNELBASE!WaitForMultipleObjectsEx
的参数是什么或它使用的调用约定,它不是公共API。您需要查看下面的行,该行指的是对kernel32!WaitForMultipleObjectsExImplementation
的调用。它的参数看起来更像是WaitForMultipleObjectsEx
的参数:第一个参数length
是1,这是合理的,下一个是指向句柄数组的指针,其余的是零。因此,您似乎需要在地址HANDLE
处转储第一个ULONG_PTR
,即000000000763d720
。