异常处理回调函数
来源:互联网 发布:pageoffice php 编辑:程序博客网 时间:2024/06/03 22:08
SEH异常处理回调函数的参数定义如下:
_Handlerproc{_lpExceptionRecord,//指向一个EXCEPTION_RECORD结构_lpSEH,//指向EXCEPTION_REGISTRATION结构地址_lpContext,//指向CONTEXT结构_lpDispatcherContext}
返回值:
ExceptionContinueExcetion(等于0):回调函数返回后,系统将线程环境设置为_lpContext参数指定的CONTEXT结构并继续执行;
ExceptionContinueSearch(等于1):回调函数拒绝处理这个异常,系统将通过EXCEPIONT_REGISTRATION结构的prev字段得到前一个回调函数的地址并调用它;
ExceptionNestedException(等于2):回调函数在执行中又发生了新的异常,即嵌套异常;
ExceptionCollidedUnwind(等于3):发生了嵌套的展开操作。
CONTEXT结构成员可以改变,这意味着程序可以用改变的CONTEXT内容去执行程序,如清除断点,改变代码运行路线等。例如:
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>; Include 文件定义;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> include windows.inc include user32.inc include kernel32.inc includelib user32.lib includelib kernel32.lib ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>; 数据段;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> .dataCaption db "SEH",0TextSEHdb "Hello,SEH!",0Textdb "SEH程序没有运行",0;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>; 代码段;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> .code_start:;********************************************************************; 在堆栈中构造一个 EXCEPTION_REGISTRATION 结构;******************************************************************** Assume FS:NOTHING push offset perThread_Handler push fs:[0] mov fs:[0],esp ;********************************************************************; 会引发异常的指令;******************************************************************** mov esi,0mov eax,[esi] WouldBeOmit: invoke MessageBox,0,addr Text,addr Caption,MB_OK ;这一句将无法被执行 ;********************************************************************; 异常处理完毕后,从这里开始执行;******************************************************************** ExecuteHere: invoke MessageBox,0,addr TextSEH,addr Caption,MB_OK;********************************************************************; 恢复原来的 SEH 链;******************************************************************** pop fs:[0] add esp,4 ;******************************************************************** invoke ExitProcess,NULL ;********************************************************************; 将 EIP 指向ExecuteHere处的位置并恢复堆栈;********************************************************************perThread_Handler proc uses ebx pExcept:DWORD,pFrame:DWORD,pContext:DWORD,pDispatch:DWORD mov eax,pContext Assume eax:ptr CONTEXT lea ebx, ExecuteHere ; 异常后准备从ExecuteHere后开始执行 mov [eax].regEip,ebx xor ebx,ebx mov [eax].iDr0,ebx ; 对Drx调试寄存器清零,使断点失效(反跟踪) mov [eax].iDr1,ebx mov [eax].iDr2,ebx mov [eax].iDr3,ebx mov [eax].iDr7,341 mov eax,0 ; ExceptionContinueExecution,表示已经修复 ret perThread_Handler endp;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>end _start
0 0
- 异常处理回调函数
- nodejs中处理回调函数的异常
- ajax回调函数使用this异常
- PHP 使用回调函数(set_error_handler)处理异常和错误
- PHP 的异常处理、错误的抛出及错误回调函数
- C++回调函数的处理
- [转]C++回调函数的处理
- 自设计消息处理回调函数
- C++回调函数的处理
- 注册回调函数处理SQLITE_BUSY错误
- 回调函数和中断处理函数
- React * Ref回调函数处理
- c++调用c时回调函数的处理
- 关于回调函数处理DLL里的数据问题
- unity3d事件函数整理,事件,回调函数,消息处理
- WINPCAP抓包并用回调函数处理包
- unity3d事件函数整理,事件,回调函数,消息处理
- VC 回调函数的参数是如何处理的
- 使用C++方式解决CallFunc创建
- ubuntu12.04samba服务器配置
- 网页关键词频率计算(词频计算js版)
- 黑马程序员——java之JDK1.5新特性
- NDK编译的时候遇到No rule to make target needed by *.o
- 异常处理回调函数
- python程序的调试方法
- 多态与索引器
- 簡單SQL存儲過程實例
- 【cocos2dx】cocos2dx学习笔记
- linux内核中关于MACH_TYPE_OMAP_4430SDP的定义
- zend2数据层代码示例
- Language Basics:语言基础
- Classes and Objects :类和对象(1)