关于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结构化异常处理》
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结构化异常处理》
相关文章推荐
- 关于C++——理解C++默默编写并调用了哪些函数&&函数初始化式(初始化列表相关)
- 讨论关于C++当中的模板实现(上)
- RuntimeException的特殊情况&&[C++] 有人会在程序中try catch吗?&&什么样的问题需要用try catch语句执行
- 在.NET里面实现异常处理功能讨论(编写Try/Catch)
- C++ 的 try throw catch 反汇编方法 收藏
- C++中的异常操作:throw&try&catch
- 关于C++ try catch 不能捕获到SEH异常的问题
- 关于C++异常机制的笔记(SEH, try-catch)
- C++中关于虚函数接口继承与实现继承的讨论
- 建了一个"symbina 技术"邮件列表,欢迎大加入到这个群,讨论symbian C++相关的技术问题!
- C++ 的 try throw catch 反汇编方法
- [C++]实现--讨论关于实现中可能出现的问题
- C++使用try&catch进行异常处理的简单范例
- 关于c++异常的初接触try{}catch{}
- 关于网络安全通过c++实现CA证书相关总结
- c++ try catch throw 用法
- 关于try,catch,finally相关笔记
- java关于异常处理只使用try-finally而不使用catch
- C++异常处理: try,catch,throw,finally的用法