能力值:
( LV4,RANK:50 )
|
-
-
2 楼
EIP被改成0以后,程序中很多这种调用你怎么知道哪里调用的呢,这时候只能崩溃了吧,即使跳到其他地方去也是堆栈不平衡,没用啊。堆栈里面是会有返回部分的信息,但是也是很难确定的,你也不确定下次还是不是从同一个地方调用过来啦。
能确定哪里出现的异常最好是去处理异常,再不行把出错的代码try包含起来
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
问题是我出错的时候代码已经指向EIP,根本不知道是哪里出错。主进程是别人的。
|
能力值:
( LV4,RANK:50 )
|
-
-
4 楼
加调试器,eip成0的时候断下来,call的话,栈里面有返回地址
|
能力值:
( LV7,RANK:140 )
|
-
-
5 楼
eip出错的时候,你检查一下堆栈,找到出错的这个call的上级调用。然后就一步一步跟着看是哪里出错。如果堆栈也被清理了那就更麻烦了。观察一下eip出错是由什么事件引起的,从事件开始的时候慢慢跟。如果是不定时的,就看看线程和计时器回调
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
当单线程程序陷入死循环的时候,如while(1){...},消息循环是断了的。这时候我强制跳到消息循环体的入口,寄存器堆栈都设置为正常状态时,运行到这一句就不行了_CWinThread::PumpMessage,程序在mscorwks.dll中这65B329EF一句中断:
65B329E7 2D 00100000 sub eax, 1000
65B329EC 8945 FC mov dword ptr [ebp-4], eax
65B329EF 8320 00 and dword ptr [eax], 0;[00188D2C]=00000000
65B329F2 8B45 FC mov eax, dword ptr [ebp-4]
65B329F5 ^ EB F0 jmp short 65B329E7
再单步执行,eax不断减100,直到eax指向的地址不存在,程序崩溃。
究竟是什么原因呢?
|
|
|