首页
社区
课程
招聘
[求助]OD中为何SetUnhandledExceptionFilter筛选器处理异常到不了Handler
发表于: 2010-3-10 00:26 8674

[求助]OD中为何SetUnhandledExceptionFilter筛选器处理异常到不了Handler

2010-3-10 00:26
8674
我在比较SetUnhandledExceptionFilter和SEH在处理异常方面的差别时,发现在OD中,SetUnhandledExceptionFilter方式到不了Handler,无论是否忽略所有异常,都停在异常代码处(0地址写入),显示运行终止。SEH方式正常。向大牛请教是什么原理?(对OD内部工作机制不清楚

源程序代码如下:
                .386
                .model        flat,stdcall
                option        casemap:none
include                windows.inc
include                kernel32.inc
include                user32.inc
includelib        kernel32.lib
includelib        user32.lib

                .data
lpOldHandler        dd        ?

                .const
szMsg                db        '异常发生位置:%08x, 异常代码:%08x, 标志:%08x',0
szSafe                db        '回到安全的地方!',0
szCaption        db        '筛选器异常处理例子',0

                .code
_Handler        proc        _lpExceptionPoint
                LOCAL        @szBuffer[256]:byte
                pushad
                mov        esi,_lpExceptionPoint
                assume        esi:ptr EXCEPTION_POINTERS
                mov        edi,[esi].ContextRecord
                mov        esi,[esi].pExceptionRecord
                assume        esi:ptr EXCEPTION_RECORD,edi:ptr CONTEXT
                invoke        wsprintf,addr @szBuffer,addr szMsg,[edi].regEip,[esi].ExceptionCode,[esi].ExceptionFlags
                invoke        MessageBox,NULL,addr @szBuffer,NULL,MB_OK
                mov        [edi].regEip,offset _SafePlace
                assume        esi:nothing,edi:nothing
                popad
                mov        eax,EXCEPTION_CONTINUE_EXECUTION
        ret
_Handler endp
start:
                invoke        SetUnhandledExceptionFilter,addr _Handler
                mov        lpOldHandler,eax
                xor        eax,eax
                mov        dword ptr [eax],0                ; 在这里过不了
_SafePlace:
                invoke        MessageBox,NULL,addr szSafe,addr szCaption,MB_OK
                invoke        SetUnhandledExceptionFilter,lpOldHandler
                invoke        ExitProcess,NULL
                end        start

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 359
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
OD调试选项-〉异常-〉非法访问内存,这个勾上可以传递0地址访问异常下去。
----------------------------
测试过了,确实可以传递过去。
2010-3-14 00:07
0
雪    币: 41
活跃值: (35)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
和楼主一样,无法调试SetUnhandledExceptionFilter()设置的异常筛选器,望牛人解答。
2010-3-18 10:50
0
雪    币: 440
活跃值: (87)
能力值: ( LV9,RANK:200 )
在线值:
发帖
回帖
粉丝
4
OD是RING3调试器。无法调试SetUnhandledExceptionFilter()设置的异常筛选器。
好像《软件加密技术内幕》里面有提到过。
2010-3-18 11:11
0
雪    币: 41
活跃值: (35)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
使用OD里的插件HideOD,将Options里面的UnhandledExceptionFilter打勾,然后执行一下这个HideOD插件,OK,就可以调试filter里面的代码了,爽,我已经试过了,特来通知一下。
2010-3-18 13:16
0
雪    币: 2242
活跃值: (488)
能力值: ( LV9,RANK:200 )
在线值:
发帖
回帖
粉丝
6
http://bbs.pediy.com/showthread.php?t=9023
2010-3-19 20:11
0
雪    币: 257
活跃值: (28)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
7
感谢楼上的各位热心解答!
2010-4-20 23:35
0
游客
登录 | 注册 方可回帖
返回
//