结构化异常处理(SEH)机制探索
cosmoslife
多媒体编程、网络编程、系统编程、网络安全编程
展开
-
SEH stack 结构探索(3)--- __exception_handler4() 探秘1
SEH stack 结构探索(3)--- __exception_handler4() 探秘1在我的环境里,用户的缺省的 exception handler 是 MSVCR100D!_except_handler4(),它是 VC/C++ 的调试版本运行库里的函数,当然如果是发行版的话是MSVCR100!_except_handler4()在 WinNT.h 里定义的 exceptio转载 2012-06-05 12:24:15 · 1637 阅读 · 0 评论 -
深入理解Win32结构化异常处理(二)
有了前面的最简单的例子,让我们再回过头去填补一些空白。虽然这个异常回调机制很棒,但它并不是一个完美的解决方案。对于稍微复杂一些的应用程序来说,仅用一个函数就能处理程序中任何地方都可能发生的异常是相当困难的。一个更实用的方案应该是有多个异常处理例程,每个例程针对程序的特定部分。不知你是否知道,实际上,操作系统提供的正是这个功能。 还记得系统用来查找异常回调函数的 EXCEPTION_REG转载 2015-09-30 11:03:09 · 869 阅读 · 0 评论 -
深入理解Win32结构化异常处理(一)
[翻译]深入理解Win32结构化异常处理(一) 在所有的Win32操作系统提供的功能里,最常用但是描述最不全的(underdocument)恐怕就是结构化异常处理了(structured exception handling (SEH))。当你想到Win32的结构化异常处理,你会想到 _try, _finally, 和 _except这些东西,你可以从任何一本Win32的书中找转载 2015-09-30 11:08:54 · 1357 阅读 · 0 评论 -
深入理解Win32结构化异常处理(四)
[翻译]深入理解Win32结构化异常处理(四) 如果你已经走了这么远,不把整个过程讲完对你有点不公平。我已经讲了当异常发生时操作系统是如何调用用户定义的回调函数的。我也讲了这些回调的内部情况,以及编译器是如何使用它们来实现__try和__except的。我甚至还讲了当某个异常没有被处理时所发生的情况以及系统所做的扫尾工作。剩下的就只有异常回调过程最初是从哪里开始的这个问题了。好吧,转载 2015-09-30 11:04:48 · 729 阅读 · 0 评论 -
SEH stack 结构探索(5)--- __exception_handler4() 探秘3之 TryLevel
SEH stack 结构探索(5)--- __exception_handler4() 探秘3之 TryLevel现在我们探索一下 SEH stack 里的 TryLevel到底 TryLevel 是什么东西,来看看下面的代码: __try { /* 0-level */转载 2012-06-05 15:40:13 · 793 阅读 · 0 评论 -
SEH stack 结构探索(4)--- __exception_handler4() 探秘2之 scopetable 结构
SEH stack 结构探索(4)--- __exception_handler4() 探秘2之 scopetable 结构现在我们来继续分析 __exception_handler4_common() 的代码我们来看看在 WinDbg 里显示的 __exception_handler4_common() 原型:0:000:x86> x MSVCR100D!*han转载 2012-06-05 15:33:48 · 1473 阅读 · 0 评论 -
SEH 机制探索2 --- 构建 SEH 链
SEH 机制探索2 --- 构建 SEH 链下面是异常处理程序的语法结构:__try { // 受保护的代码}__except(exception filter){ // 异常处理程序}__try{} 里的代码是受保护的,编译器会为 __try{} 块构建 SEH 链,__except(){} 块是根据括号里的转载 2012-06-05 11:11:20 · 863 阅读 · 0 评论 -
SEH 机制探索1 --- TEB 结构
SEH 机制探索1 --- TEB 结构在 windows 中的 SEH(Structured Exception Handling)结构化异常处理需要使用 TIB(Thread Information Block)线程信息块的 _EXCEPTION_REGISTRATION_RECORD结构。而 TIB 结构包括在 TEB(Thread Environment Block) 结构下,转载 2012-06-05 10:37:22 · 1369 阅读 · 0 评论 -
__except() 的处理2 --- 全局展开
__except() 的处理2 --- 全局展开前面我们了解到对 EXCEPTION_EXECUTE_HANDLER 的处理,重要的一步会进行全局展开:MSVCR100D!_except_handler4_common+0x118:01152558 8b4de0 mov ecx,dword ptr [ebp-20h]转载 2012-06-05 15:55:47 · 643 阅读 · 0 评论 -
SEH stack 结构探索(2)--- 用户程序构造的 SEH stack 结构
SEH stack 结构探索(2)--- 用户程序构造的 SEH stack 结构经过上一篇对 prolog 的分析,我们对 SEH 的 stack 结构有大概了解,现在我们回过头来看看在第 2 篇《SEH 机制探讨2 --- 构建 SEH 链》的示例,但是 __except() 部分有了重大的变化:int _tmain(int argc, _TCHAR* argv转载 2012-06-05 12:00:08 · 956 阅读 · 0 评论 -
__except() 的处理1 --- 计算 Filter 表达式
__except() 的处理1 --- 计算 Filter 表达式现在我们来关注 __except() 块 __except(GetExceptionCode() == EXCEPTION_INT_DIVIDE_BY_ZERO ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARC转载 2012-06-05 15:42:58 · 1916 阅读 · 0 评论 -
SEH stack 结构探索(1)--- 从 SEH 链的最底层(线程第1个SEH结构)说起
SEH stack 结构探索(1)--- 从 SEH 链的最底层(线程第1个SEH结构)说起线程的第 1 个 SEH 结构是什么时候构建的,我在线程启动例程找到答案:ntdll32!_RtlUserThreadStart() 里。0:000:x86> uf ntdll32!_RtlUserThreadStartntdll32!_RtlUserThreadStart:转载 2012-06-05 11:27:29 · 2290 阅读 · 0 评论 -
深入理解Win32结构化异常处理(三)
转载URL:http://www.cnblogs.com/salomon/archive/2012/06/20/2556349.html[翻译]深入理解Win32结构化异常处理(三)__except_handler3 and the scopetable我真的很希望让你看一看Visual C++运行时库源代码,让你自己好好研究一下__except_handler3函数,转载 2015-09-30 11:04:06 · 876 阅读 · 0 评论