首页
社区
课程
招聘
[旧帖] 筛选器回调函数问题 0.00雪花
发表于: 2010-1-5 20:12 2869

[旧帖] 筛选器回调函数问题 0.00雪花

2010-1-5 20:12
2869
罗云彬的《win环境下32位汇编语言程序设计》506页里有这么个程序
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Sample code for < Win32ASM Programming 2nd Edition>
; by 罗云彬, http://asm.yeah.net
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; TopHandler.asm
; 最高层异常处理
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 使用 nmake 或下列命令进行编译和链接:
; ml /c /coff TopHandler.asm
; Link /subsystem:windows TopHandler.obj
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                .386
                .model flat,stdcall
                option casemap:none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include                windows.inc
include                user32.inc
includelib        user32.lib
include                kernel32.inc
includelib        kernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                .data
lpOldHandler        dd        ?

                .const

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

                .code
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Exception Handler 异常处理程序
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_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        ;产生异常,然后_Handler被调用
;                ...
; 如果这中间有指令,这些指令将不会被执行!
;                ...
_SafePlace:
                invoke        MessageBox,NULL,addr szSafe,addr szCaption,MB_OK
                invoke        SetUnhandledExceptionFilter,lpOldHandler
                invoke        ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                end        start
其中回调函数有这么一行mov        [edi].regEip,offset _SafePlace 就是把当前程序的ip修改 offset _SafePlace 请问是即可生效吗 如果即可生效的话那回调函数的后面几行就不能执行了吧 ?直接执行offset _SafePlace?如果不是即可生效的话  是等回调函数返回在从offset _SafePlace那里执行? 回调函数里的RET 是返回那里? 难道调用回调函数的时候是通过CALL 回调函数的形式?
小弟是在百思不得其解  就各位老大指教指教阿 谢谢啦

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

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 41
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
不好意思 问个白痴问题 知道了
2010-1-5 20:33
0
游客
登录 | 注册 方可回帖
返回
//