请高手指点一下这段代码
一个多线程的程序,运行总是卡住,程序总是没有响应.
具体错误提示:
TOOL.exe.mdmp 中的 0x7c95860c 处未处理的异常: 0xCFFFFFFF: Process was unresponsive and was terminated
反汇编看到这里报错:
7C958517 push 0
7C958519 push 0
7C95851B call 7C956CED
7C958520 mov eax,1
7C958525 ret 10h
7C958528 mov ecx,dword ptr fs:[0]
7C95852F mov edx,7C958508h
7C958534 lea eax,[esp+10h]
7C958538 mov dword ptr [esp+10h],ecx
7C95853C mov dword ptr [esp+14h],edx
7C958540 mov dword ptr fs:[00000000h],eax
7C958546 add esp,4
7C958549 pop edx
7C95854A mov eax,dword ptr fs:[00000030h]
7C958550 mov eax,dword ptr [eax+2Ch]
7C958553 call dword ptr [eax+edx*4]
7C958556 push eax
7C958557 push 0
7C958559 push 0
7C95855B call 7C956CED
7C958560 mov esi,eax
7C958562 push esi
7C958563 call 7C958692
7C958568 jmp 7C958562
7C95856A ret 0Ch
7C95856D lea ecx,[ecx]
7C958570 mov ecx,dword ptr [esp+4]
7C958574 mov ebx,dword ptr [esp]
7C958577 push ecx
7C958578 push ebx
7C958579 call 7C961567
7C95857E or al,al
7C958580 je 7C95858E
7C958582 pop ebx
7C958583 pop ecx
7C958584 push 0
7C958586 push ecx
7C958587 call 7C956DAD
7C95858C jmp 7C958599
7C95858E pop ebx
7C95858F pop ecx
7C958590 push 0
7C958592 push ecx
7C958593 push ebx
7C958594 call 7C95775D
7C958599 add esp,0FFFFFFECh
7C95859C mov dword ptr [esp],eax
7C95859F mov dword ptr [esp+4],1
7C9585A7 mov dword ptr [esp+8],ebx
7C9585AB mov dword ptr [esp+10h],0
7C9585B3 push esp
7C9585B4 call 7C95861F
7C9585B9 ret 8
7C9585BC push ebp
7C9585BD mov ebp,esp
7C9585BF sub esp,50h
7C9585C2 mov dword ptr [esp+0Ch],eax
7C9585C6 mov eax,dword ptr fs:[00000018h]
7C9585CC mov eax,dword ptr [eax+1A4h]
7C9585D2 mov dword ptr [esp],eax
7C9585D5 mov dword ptr [esp+4],0
7C9585DD mov dword ptr [esp+8],0
7C9585E5 mov dword ptr [esp+10h],0
7C9585ED push esp
7C9585EE call 7C95861F
7C9585F3 mov eax,dword ptr [esp]
7C9585F6 mov esp,ebp
7C9585F8 pop ebp
7C9585F9 ret
7C9585FA lea esp,[esp]
7C958601 lea esp,[esp]
7C958608 mov edx,esp
7C95860A sysenter
7C95860C ret <<< ---------- 这里报错
7C95860D lea esp,[esp]
7C958614 lea esp,[esp]
7C958618 lea edx,[esp+8]
7C95861C int 2Eh
7C95861E ret
7C95861F push ebp
7C958620 mov ebp,esp
7C958622 lea esp,[esp-2D0h]
7C958629 push esp
7C95862A call 7C9587E4
7C95862F mov edx,dword ptr [ebp+4]
7C958632 mov eax,dword ptr [ebp+8]
7C958635 add dword ptr [esp+0C4h],4
7C95863D mov dword ptr [eax+0Ch],edx
7C958640 mov dword ptr [esp],10007h
7C958647 mov eax,dword ptr fs:[00000030h]
7C95864D test byte ptr [eax+2],0FFh
7C958651 jne 7C95866C
7C958653 push esp
7C958654 push dword ptr [ebp+8]
7C958657 call 7C961567
7C95865C test al,al
7C95865E je 7C95867B
7C958660 mov ecx,esp
7C958662 push 0
7C958664 push ecx
7C958665 call 7C956DAD
7C95866A jmp 7C958688
7C95866C mov ecx,esp
7C95866E push 1
7C958670 push ecx
7C958671 push dword ptr [ebp+8]
7C958674 call 7C95775D
7C958679 jmp 7C958688
7C95867B mov ecx,esp
7C95867D push 0
7C95867F push ecx
7C958680 push dword ptr [ebp+8]
7C958683 call 7C95775D
7C958688 push eax
7C958689 call 7C958692
7C95868E int 3
7C95868F jmp 7C958691
7C958691 nop
7C958692 push ebp
7C958693 mov ebp,esp
7C958695 lea esp,[esp-320h]
7C95869C push esp
7C95869D call 7C9587E4
7C9586A2 add dword ptr [esp+0C4h],4
7C9586AA lea ecx,[esp+2D0h]
7C9586B1 mov eax,dword ptr [ebp+4]
7C9586B4 mov dword ptr [esp],10007h
7C9586BB mov dword ptr [ecx+0Ch],eax
7C9586BE and dword ptr [ecx+10h],0
7C9586C2 mov eax,dword ptr [ebp+8]
7C9586C5 and dword ptr [ecx+8],0
7C9586C9 mov dword ptr [ecx],eax
7C9586CB mov dword ptr [ecx+4],1
7C9586D2 mov eax,dword ptr fs:[00000030h]
7C9586D8 test byte ptr [eax+2],0FFh
7C9586DC jne 7C9586F9
7C9586DE push esp
7C9586DF push ecx
7C9586E0 call 7C961567
7C9586E5 lea ecx,[esp+2D0h]
7C9586EC mov edx,esp
7C9586EE push 0
7C9586F0 push edx
7C9586F1 push ecx
7C9586F2 call 7C95775D
7C9586F7 jmp 7C958704
7C9586F9 mov edx,esp
7C9586FB push 1
7C9586FD push edx
7C9586FE push ecx
7C9586FF call 7C95775D
7C958704 push eax
7C958705 call 7C958692
7C95870A int 3
7C95870B jmp 7C9B8C21
7C958710 mov edx,7C958786h
7C958715 jmp 7C95871F
7C958717 nop
7C958718 mov edx,7C9587ADh
7C95871D lea ecx,[ecx]
7C95871F push ebx
7C958720 push esi
7C958721 push edi
7C958722 xor eax,eax
7C958724 xor ebx,ebx
7C958726 xor esi,esi
7C958728 xor edi,edi
7C95872A push dword ptr [esp+20h]
7C95872E push dword ptr [esp+20h]
7C958732 push dword ptr [esp+20h]
7C958736 push dword ptr [esp+20h]
7C95873A push dword ptr [esp+20h]
7C95873E call 7C95874C
7C958743 pop edi
7C958744 pop esi
7C958745 pop ebx
7C958746 ret 14h
7C958749 nop
7C95874A mov edi,edi
7C95874C push ebp
7C95874D mov ebp,esp
因为程序在运行的时候不报错,而这个错误跟踪不到。
请高手帮忙看看,推测一下有些什么问题,谢谢。
[解决办法]
这段代码看起来是ntdll.dll中的,问题跟这段代码没关系。程序什么时候出错?具体是什么表现?如果是停住不动,可以调试暂停程序,根据调用堆栈的内容找出正在执行的自己的代码。估计是线程互锁了。
[解决办法]
出现此类问题的可能性海了。
比较隐晦的情况中,常见的有:
函数调用类型不配套。
c++的函数重载 混淆掉。
堆栈中 局部变量的溢出(首先要确定不是 此DLL--应该是csharp支持库的DLL--里的问题)
头文件和 DLL版本不匹配。
/:^] 胡扯了一些没用的,来点有帮助的猜测:
按照经验,cnzdgs说的情况很可能是当前的问题,因为执行中断下在刚从R0返回的系统空间中,多数程序经常执行的 系统代码 除了消息处理外便是 线程调度了,因此假设为普通程序(web的话几乎是肯定了)可以确定是刚刚完成 线程调度便断下了。由此 则此线程在自己的时间片中 大部分时间用来 线程调度了,也便是线程内的主要代码没有执行到,简单说是一个代码 是否执行的标志在 错误的时间、不了解的情况中被设置了。
但未必是一个 线程互锁。用 代码互锁或 死循环的 猜测去找 比较好。