首页
社区
课程
招聘
[原创]SEH分析笔记(X86篇)
发表于: 2011-10-5 12:46 36824

[原创]SEH分析笔记(X86篇)

2011-10-5 12:46
36824
收藏
免费 9
支持
分享
最新回复 (49)
雪    币: 2503
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
26
好东西 收藏了 谢谢楼主的分享!
2011-10-8 22:31
0
雪    币: 235
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
27
学习了   。。。。
2011-10-9 00:15
0
雪    币: 265
活跃值: (46)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
28
好好学习下~
2011-10-9 10:53
0
雪    币: 49
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
29
多谢LZ分享。SEH刚开始接触。来学习下
2011-10-10 20:47
0
雪    币: 167
活跃值: (1574)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
30
辛苦了 感谢分享 晚上细细品读一下 ~
2011-10-11 17:41
0
雪    币: 196
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
31
多谢,好文。。。
2011-10-12 16:05
0
雪    币: 181
活跃值: (161)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
32
花了点时间看了下,好文,不仅让人知其然,更让人知其所以然。只是有点疑惑,异常处理完成后,为什么不是从异常点继续执行,而是从异常处理后面的代码继续执行?接触不深,问题较菜,求解。
2011-10-12 16:38
0
雪    币: 48
活跃值: (425)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
33
好文章,慢慢学习
2011-10-12 17:33
0
雪    币: 342
活跃值: (199)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
34
是从异常点继续执行还是顺着异常处理的代码块继续执行,是由程序猿提供的 lpfnFilter(即 __except 括号内的代码)的返回值决定的。
如果需求是前者,那么可以返回 EXCEPTION_CONTINUE_EXECUTION;
如果是后者那么可以返回 EXCEPTION_EXECUTE_HANDLER
2011-10-12 20:48
0
雪    币: 181
活跃值: (161)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
35
原来如此,异常处理后不像正常函数执行那样通过ret返回调用者,而是根据lpfnFilter的返回值,直接跳到异常处理后面的代码,或者异常点继续执行,不知我理解是否对?
2011-10-13 17:44
0
雪    币: 185
活跃值: (411)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
36
下载附件看,帖子太长了
2011-10-18 10:06
0
雪    币: 1283
活跃值: (46)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
37
收藏起来,慢慢研究!感谢!
2011-10-19 09:52
0
雪    币: 224
活跃值: (65)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
38
楼主看了两天就这么厉害了?大概看了多久啊?
交流下哈,看的时候这里一直困惑:
你写的如下://好象软件调试中也是这么说的
如果 PreviousMode 是 KernelMode,那么,
    如果 FirstChance 为 TRUE,那么将该异常传达给内核调试器,如果内核调试器没有处理,那么调用 RtlDispatchException 进行处理。
    如果 FirstChance 为 FALSE,那么再次将该异常传达给内核调试器,如果内核调试器没有处理,那么 BUGCHECK。

我翻别的资料有这么说的:
用户态和内核态第一次机会给调试器,第2次机会给注册的异常处理器。
如果在内核态抛出了异常并自己处理(比如除零异常自己修改除数和调整EIP),按你上面的提法如果调试器不处理就只能蓝屏?

纯粹交流哈,
2011-10-19 22:00
0
雪    币: 342
活跃值: (199)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
39
分析和写这篇笔记大概用了40个小时左右,但是目前在分析x64异常处理的过程中发现自己对x86这块还没有完全吃透,目前正在分析琢磨,希望晚一些能对这个笔记进行一些补充。

另外,如果自己抛出的异常,内核调试器(如果存在,后续简称KD,我懒……)会先得到处理机会,如果KD没有处理,则使用 RtlDispatchException 开始常规的异常派发,这个时候就会调用自己提供的异常处理。如果处理了整个异常派发就结束了,不会再给回到 KD。如果整个异常链上没有任何处理块能处理,那么要不就再给 KD 一次机会,要么就就 BSOD。

需要说明的是,内核态除零异常直接 BSOD,不会给 KD 机会,也不会给程序猿提供的异常处理机会

[欢迎交流
这篇笔记难免会因为我个人水平的问题出现纰漏或错误,之所以分享出来也是希望能有对这块同样感兴趣的朋友一起讨论,纠正我的错误,大家一起吃透它。]
2011-10-20 07:51
0
雪    币: 328
活跃值: (154)
能力值: ( LV12,RANK:310 )
在线值:
发帖
回帖
粉丝
40
mark,学习,路过,……
2011-10-20 08:25
0
雪    币: 413
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
41
顶LZ!
新手入门,认真学习下LZ的SEH理解,更要学习LZ的态度!
2011-10-20 17:44
0
雪    币: 224
活跃值: (65)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
42
恩,这几天又看了些,楼主确实吃的比我透点.
2011-10-30 22:23
0
雪    币: 114
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
43
不错 正巧最近也在学习异常的处理!!收藏下
2011-11-3 02:48
0
雪    币: 342
活跃值: (199)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
44
更新记录:

v1.0.2, 2011-10-31:调整若干描述语句;增加 ExceptionNestedException 返回值的补充说明。
2011-11-4 20:01
0
雪    币: 890
活跃值: (55)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
45
感谢楼主,学习了,楼主的精神让人感动呀
2012-2-27 13:02
0
雪    币: 949
活跃值: (18)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
46
喜欢这样的技术贴。
2012-2-27 21:51
0
雪    币: 195
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
47
谢谢了,好东西呀
2012-3-3 12:12
0
雪    币: 406
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
48
下载了,慢慢学习,老了,学不动了,很感谢
2018-10-18 22:02
0
雪    币: 688
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
49
mark
2019-3-5 15:58
0
雪    币: 163
活跃值: (624)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
50
感谢
2022-3-15 16:57
0
游客
登录 | 注册 方可回帖
返回
//