当前位置: 代码迷 >> 汇编语言 >> 崩溃的原因?解决方法
  详细解决方案

崩溃的原因?解决方法

热度:487   发布时间:2016-05-02 04:42:44.0
崩溃的原因?
C++程序运行时崩溃了,在一个DLL中的部分汇编代码如下:
红色字体部分表示程序崩溃时编译器停留处的代码。
01D1C8F0  test        dword ptr [eax+4],8000h 
01D1C8F7  jne         0212F5DA 
01D1C8FD  xor         eax,eax 
01D1C8FF  ret              
01D1C900  push        ebp  
01D1C901  mov         ebp,esp 
01D1C903  and         esp,0FFFFFFF8h 
01D1C906  push        ecx  
01D1C907  push        ebx  
01D1C908  push        esi  
01D1C909  push        edi  
01D1C90A  xor         bl,bl 
01D1C90C  xor         edi,edi 
01D1C90E  mov         esi,ecx 
01D1C910  cmp         byte ptr [ebp+18h],bl 
01D1C913  jne         01D1C922 
01D1C915  test        dword ptr [esi+4],2000000h 
01D1C91C  jne         02183999 
01D1C922  test        dword ptr [esi+4],8000h 
01D1C929  jne         01D1C98C 
01D1C92B  mov         ecx,esi 
01D1C92D  test        ecx,ecx 
01D1C92F  je          021839CA 
-----------------------------------------------------------------------------
崩溃时弹出的错误对话框如下:

-----------------------------------------------------------------------------
因为崩溃时无法定位到某一条C++语句,只能看到反汇编代码,小弟的汇编还停留在8086水平,还望各位大虾能给予帮助。如果各位需要小弟继续提供更多的上下文,小弟十分乐意,再次谢谢各位。
------解决方案--------------------
这异常0xC0000005是ACCESS VIOLATION,通常是使用了无效的指针引起的。
从你的代码来看,地址01D1C900开始的函数使用了ms fastcall调用约定,至少有一个参数(ecx),是一个指针,指向某种结构。

------解决方案--------------------
在c++编译的代码中,ecx一般是this指针。先确定出错所在函数是哪个函数。
  相关解决方案