首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

请一下这段代码

2012-04-20 
请高手指点一下这段代码一个多线程的程序,运行总是卡住,程序总是没有响应.具体错误提示:TOOL.exe.mdmp 中

请高手指点一下这段代码
一个多线程的程序,运行总是卡住,程序总是没有响应.
具体错误提示:
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的话几乎是肯定了)可以确定是刚刚完成 线程调度便断下了。由此 则此线程在自己的时间片中 大部分时间用来 线程调度了,也便是线程内的主要代码没有执行到,简单说是一个代码 是否执行的标志在 错误的时间、不了解的情况中被设置了。
但未必是一个 线程互锁。用 代码互锁或 死循环的 猜测去找 比较好。

热点排行