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指针。先确定出错所在函数是哪个函数。