首页
社区
课程
招聘
[求助]在UEH中发现EIP为NULL
发表于: 2016-4-29 09:26 3419

[求助]在UEH中发现EIP为NULL

2016-4-29 09:26
3419
在TopLevelExcepFilter( PEXCEPTION_POINTERS ExceptionInfo )中发现ExceptionInfo->ExceptionRecord->ExceptionAddress为NULL

这个程序一定只能崩溃吗?还能回溯到上一步或上几步的cpu地址吗。

如果不能,跳到窗口消息循环的入口里是否可行?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 293
活跃值: (287)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
EIP被改成0以后,程序中很多这种调用你怎么知道哪里调用的呢,这时候只能崩溃了吧,即使跳到其他地方去也是堆栈不平衡,没用啊。堆栈里面是会有返回部分的信息,但是也是很难确定的,你也不确定下次还是不是从同一个地方调用过来啦。
能确定哪里出现的异常最好是去处理异常,再不行把出错的代码try包含起来
2016-4-29 10:06
0
雪    币: 12628
活跃值: (3127)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
问题是我出错的时候代码已经指向EIP,根本不知道是哪里出错。主进程是别人的。
2016-4-29 10:56
0
雪    币: 293
活跃值: (287)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
加调试器,eip成0的时候断下来,call的话,栈里面有返回地址
2016-4-29 11:45
0
雪    币: 786
活跃值: (3435)
能力值: ( LV7,RANK:140 )
在线值:
发帖
回帖
粉丝
5
eip出错的时候,你检查一下堆栈,找到出错的这个call的上级调用。然后就一步一步跟着看是哪里出错。如果堆栈也被清理了那就更麻烦了。观察一下eip出错是由什么事件引起的,从事件开始的时候慢慢跟。如果是不定时的,就看看线程和计时器回调
2016-4-29 12:38
0
雪    币: 12628
活跃值: (3127)
能力值: ( 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指向的地址不存在,程序崩溃。
究竟是什么原因呢?
2016-4-29 17:22
0
游客
登录 | 注册 方可回帖
返回
//