您的位置:首页 > 编程语言 > C语言/C++

关于C++: try...catch...的汇编实现&相关讨论,FS

2013-10-25 18:10 369 查看
http://bbs.csdn.net/topics/310013285

SEH 异常原理:

在 Windows 下,fs:[0] 指向一个SEH 数据结构,当发生异时,系统会调用 SEH结构指向的错误处理函数,所以我们中要改变 fs:[0]里的内容就行了。原理如下:

SEH结构:

{

 DWORD NextSEH; 下个SEH结构

 DWORD ErrProc; 错误处理函数

}

实现方法如下:

push Error_Handler ;压入错误处理函数地址

push fs:[0] ; 压入当SEH结构地址

mvo fs:[0],esp ;更新 SEH 链表,使其指向你的SEH

xor eax,eax

mov eax,dword ptr [eax];产生异常

...

...

恢复原SEH链表

pop dword ptr fs:[0]

pop eax

错误处理函数定义

Error_Handler   proc   uses   ecx   lpExceptRecord:DWORD, lpFrame:DWORD, lpContext:DWORD, lpDispatch:DWORD   

           ...

           ...

          

          ret  

Error_Handler   endp 

返回值说明:

错误处理函数的返回值只有两个。

EXCEPTION_CONTINUE_SEARCH = 1 不处理异常,转交系统处理

EXCEPTION_CONTINUE_EXECUTION = 0 修复错误,从异常发生处继续执行 

其它关于 错误处理函数参数的信息参看 http://tieba.baidu.com/f?kw=waruqi 里的《SEH结构化异常处理》

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息