首页
社区
课程
招聘
[求助]对SEH的展开操作不是很清楚
发表于: 2006-8-18 23:10 4344

[求助]对SEH的展开操作不是很清楚

2006-8-18 23:10
4344
今天,我看了一天的SEH,对其中的展开操作不太理解!!不明白为什么叫"展开",请高手帮我解释一下何为展开?如果SEH链上所有的回调函数都不处理异常,那是不是会被操作系统展开?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
2
在论坛上搜索“SEH IN ASM”
2006-8-19 10:10
0
雪    币: 331
活跃值: (57)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
3
终于明白什么叫展开操作了!这个RtlUnwind(展开操作函数)所作的工作就是:第一步是以EXCEPTION_UNWINDING标志调用从fs:[0]开始到当前回调函数为止的所有回调函数,第二步是将fs:[0]重新设置一下,指向注册当前回调函数使用的EXCEPTION_REGISTRATION结构.读了N遍教程后终于看懂了,嗨~笨!之前P555(罗云彬WIN32汇编语言设计)的那段--如果程序在SEH链上挂了多个回调函数,并且每个回调函数都不处理异常的话,在系统默认的显示错误的对话框出现以后,每个回调函数都会被再调用一遍,这时参数中指定的异常代码是EXCEPTION_UNWIND,异常标志的取值是2,也就是EXCEPTION_UNWINDING标志。这种调用并不是要求回调函数去处理什么异常,而是告知回调函数:“你将要被卸掉了,自己处理一些后事吧”,在这时回调函数应该进行一些卸载前的扫尾工作并且返回ExceptionContinueSearch。也说明了SEH链上每个回调函数都不处理异常的话,操作系统会对所有的回调函数进行展开操作!
2006-8-19 15:12
0
游客
登录 | 注册 方可回帖
返回
//