SEH(结构化异常处理)PPT课件

合集下载

异常处理流程PPT(共24页)

异常处理流程PPT(共24页)


2、孤单一人的时间使自己变得优秀,给 来的人 一个惊 喜,也 给自己 一个好 的交代 。

3、命运给你一个比别人低的起点是想告 诉你, 让你用 你的一 生去奋 斗出一 个绝地 反击的 故事, 所以有 什么理 由不努 力!

Hale Waihona Puke 4、心中没有过分的贪求,自然苦就少。 口里不 说多余 的话, 自然祸 就少。 腹内的 食物能 减少, 自然病 就少。 思绪中 没有过 分欲, 自然忧 就少。 大悲是 无泪的 ,同样 大悟无 言。缘 来尽量 要惜, 缘尽就 放。人 生本来 就空, 对人家 笑笑, 对自己 笑笑, 笑着看 天下, 看日出 日落, 花谢 花开, 岂不自 在,哪 里来的 尘埃!
2 客訴異常處理流程
➢ 客戶端製程問題
告知SQE此問題Heisei不會造成此問題的發生。
2 客訴異常處理流程
➢ HEISEI製程漏失問題
1.安排人員進行重工客戶端的庫存及厰内的庫存; 2.清查客戶端及廠內庫存回報主管 ; 3.如須重工須與PE確認重工手法、重工批量與物料確認待重工 數量; 4.如須重工須與PE確認重工手法、重工批量與物料確認待重工 數量; 5.如需安排人員外出重工﹐須安排車輛接送重工人員; 6.每日重工結果須填寫Sorting單回報給主管.
❖ a.人 ❖ b.機 ❖ c.料 ❖ d.法
二.原因分析
三.QIT會議討論
❖ 會議中含人、事、時、地、物、數據化、 為 什么(質疑)
❖ a.相關人員通知 ❖ b.不良資料(照片或實物) ❖ c.會議記錄 ❖ d.重工不良率 ❖ e.異常單開出
四.追蹤會議結果
❖ 追求時效追根究底落實執行 ❖ a.SIP/SOP更改 ❖ b.品質異常履歷記錄 ❖ c.人員教育訓練 ❖ d.會議結論追蹤 ❖ e.異常單收回

结构化的问题解决方法 ppt课件

结构化的问题解决方法  ppt课件

Copyright © 2012 Accenture All rights reserved.
3
目的
介绍“用结构化的方法解决技术问题”(Technical Structured Problem Solving [简 称TSPS])的方法和工具
模拟复杂的技术性问题,应用TSPS方法进行解决
实操演练TSPS工具:TSPS Board, 5W+1H, Check Sheet,等
可能的原因/ Most Probable
Cause(s)
根本原因/Root Cause
解决/Fix
Copyright © 2012 Accenture All rights reserved.
6
Technical Structured Problem Solving 结构化问题解决的思路——七步法
可能的原因/ Most Probable
Cause(s)
根本原因/Root Cause
“是什么地方出了什么情况?” ‘What is wrong with what?’
问题陈述:
描述想要寻找原因和解决的问题是什么 (例如,生产线的failure(失效)、生产效率浪费、 换型时间过长等)
好的问题陈述应该是:
预期水平实际水平time时间突然降低逐渐降低technicalstructuredproblemsolving结构化的问题解决流程面对纷繁复杂的问题我们遵循以下步骤进行分析利用结构化的思路从问题表象挖掘根本原因由现象看本质并采取差异性的对策问题发生problemoccurrence可能的原因mostprobablecauses问题表现和症状symptom根本原因rootcause预防prevent解决fixtechnicalstructuredproblemsolving结构化问题解决的思路七步法标准化解决方案standardizesolutions描述现状documentcurrentsituation分析原因identifycauses制定解决方案developsolutions实施解决方案implementsolutions下一步determinenextsteps界定问题defineproblem结构化的问题解决思路被概括为这七步对于任何一个问题我们都可以采取这种思路进行思考和分析是一种分析思路是一种方法technicalstructuredproblemsolvingtool结构化问题解决的关键工具介绍tspsreporttitle

异常处理PPT课件

异常处理PPT课件

规程是否得 到遵守?

形式不可用
操作人员理解有 困难
不适合实际操作
或不能产生好的 结果
重写规程以 符合当前的 工作方法
使用图标或数据 等重写规程以易
于理解
从技术角度重新 对规程进行回顾
规程是否得

到遵守?

工作条件不
使用规程或复杂设
适合
备时容易出错
改善工作条 件
改善工作方法,引 入傻瓜型设备装置
开始
发现和报告异常
采取纠正性行动来消除症 状
异常处理流程
制定对策 执行对策 跟踪对策的执行
记录异常
跟踪对策的有效性
确定异常的本质或根本原因
4
对发生的异常进行阶段性回 顾以检测长期性问题
确定项目/年度目标来对 长期性问题进行优先性
排序
使用PDCA来执行项目/ 年度行动计划
结束
确定根本原因
原因
X
症状
• 停机时间超过20分钟; • 所有事故\事件; • 断货超过5 %;
• 损耗超过xx %;
• 盘点差异高于2%。
当系统得到实施且发生的异常减少时,触发条件的标准可 以变得“更为严格”!
开始
发现和报告异常
1
采取纠正性行动来消除症状
记录异常
确定异常的本质或根本原因
异常处理流程
制定对策 执行对策
跟踪对策的执行
采取纠正性行动来消除症状
2
记录异常
跟踪对策的执行 跟踪对策的有效性
确定异常的本质或根本原因
对发生的异常进行阶段性回 顾以检测长期性问题
确定项目/年度目标来对 长期性问题进行优先性
排序
使用PDCA来执行项目/ 年度行动计划

二进制漏洞挖掘系列课程-利用SEH 绕过GS 安全机制

二进制漏洞挖掘系列课程-利用SEH 绕过GS 安全机制

二进制漏洞挖掘系列课程-(2)利用SEH绕过GS安全机制其实Windows在原始的程序栈前面添加了一个异常处理结构,该结构由一系列的异常处理链表组成,这条链表的起始点总是放在TIB(Thread Information Block)的第一个成员中,在x86计算机中存储在FS:[0]寄存器中。

链表的最后总是默认处理程序,这个默认处理程序的指针总是0xFFFFFFFFGS保护机制:Windows在VS7.0(Visual Studio2003)及以后版本的VisualStudio中默认启动了一个安全编译选项——GS(针对缓冲区溢出时覆盖函数返回地址这一特征)GS保护机制是在函数即将调用的时候向栈桢压入一个DWORD的随机值,同时也向.data段中存放一个Security Cookies,1.被压入栈中的随机值位于EBP之前.在.data段中的数据实现栈Cookies的校验2.在函数返回之前,系统将会执行一个额外的安全验证操作,被称作SecurityCheck3.Security当校验发现栈Cookies和.data的副本不吻合则表明发生溢出4.当检测到栈中发生溢出时,系统接管异常,函数不会被正常返回,ret指令也不会被执行5.当栈中发生溢出时,Security Cookie将被首先淹没,之后才是EBP和返回地址GS保护机制的实现细节是1系统以.data段的第一个DWORD作为Cookie的种子2每次程序运行时的Cookie的种子都不一样,随机性很强3栈桢初始化完毕后用EBP异或种子,作为当前函数的Cookie,以此区别不同函数,增强Cookie的随机性4在函数返回前,用EBP异或还原出Cookie种子绕过GS安全保护的方案1)通过覆盖SEH链表来阻止系统接管异常处理.2)通过改写C++虚表指针来控制程序流程3)用一些未开启GS安全保护的函数进行溢出(可能是关键字保护)||小于四字节的Buf 今天这个课程我们讲通过覆盖SEH链表来进行exploit还是上节课的例子,我们开始调试在反汇编窗口查看ShowFileInfo这次为了演示seh我把print函数放在了ReadFile下面我们这次看到了在ShowFileInfo中Printf函数下面有一个Security_Check_Cookie这就是我们的GS缓冲区检测机制的这个函数,工程项目是realse版本的,在项目属性只开启GS。

第6章-异常处理ppt课件(全)

第6章-异常处理ppt课件(全)

6.1 了解异常
❖ 任务3:了解异常类常用的方法 【任务内容】了解异常类常用的方法 【能力目标】掌握异常类常用的方法
public class ExceptionDemo { public static void main(String[] args) { String strPrice = "20"; try { //进行数据类型转换时,parseFloat方法有可能出现异常 float fprice = Float.parseFloat(strPrice); } catch (NumberFormatException nfe) { System.err.println("Exception:" + nfe.getMessage()); System.err.println("Exception:" + nfe.toString()); nfe.printStackTrace(); } }

}
❖ catch( ArithmeticException e )

{ System.out.println("\t捕获异常: "+e);
}
❖ catch( ArrayIndexOutOfBoundsException e )

{ System.out.println("\t捕获异常:"+e.getMessage( )); }
程序中的错误可能来自于编译错误和运行错误。 编译错误是由于所编写的程序存在语法问题,未 能通过由源代码到目标代码的编译过程而产生的 错误,它将由语言的编译系统负责检测和报告; 运行错误是在程序的运行过程中产生的错误。

第8章 计算机病毒常用技术综述

第8章  计算机病毒常用技术综述

8.2
8.2.2 使用改变可执行代码技术 的多态病毒
病毒的加密与多态(变形)技术
• 由于在运行过程中改变机器语言的指令是非常困难的,所 以这种技术主要使用在宏病毒中。在运行过程中,病毒可 以随机的改变变量名,指令的顺序等,但是不影响病毒所 实现的功能 • 一些复杂的引导型病毒也采用了这种技术,在引导区或者 分区表中,包含了一小段代码来加载实际的病毒代码,这 段代码在运行的过程中是可以改变的 • 由于动态修改机器语言代码的复杂性,完成在文件型病毒 中使用动态代码修改技术有相当的难度,但是已发现存在 病毒使用了这种技术
8.2
病毒的加密与多态(变形)技术
(续) EncryptStart: call GetKBase call GetAPIz call InfectThread Ret2Host: push HostEntry[ebx] ret
8.2.4 多态病毒的原理
;此后便是获取基地址等常规操作
• 这段代码的工作流程是:
8.2.1 加密解密技术与病毒的多 态性
病毒的加密与多态(变形)技术
8.2
8.2.1 加密解密技术与病毒的多 态性
– 每条解密指令都不是固定的,上面的固定代码 实际上只是一种可能,病毒每次复制自身的时 候,这些代码都会随机改变 – 密钥在复制自身时,也要重新生成 – 宏I3、I2使得每条指令占用10个字节的空间 (之所以选择10个字节,是因为几乎所有指令, 特别是病毒常用的,都小于10个字节,保证了 有剩余空间,又不会造成太大浪费,是一种折 衷),在10个字节的剩余空间中插入随机生成 的垃圾代码,这些垃圾代码也是随机选择的
病毒的加密与多态(变形)技术
MOV reg_1, count MOV reg_2, key MOV reg_3, offset

异常处理及操作流程ppt课件

异常处理及操作流程ppt课件

3、遇到异常不要慌张,检查现场现物,判断重要迅速处理,处乱不惊。
4、制定应急措施和再发防止措施。 应急措施具体作法:①明确发生异常时的群体。②将异常现象迅速通知有 关单位,并要求其参与处理。③对过程采取处置措施,使异常现象暂时控 制而不再恶化。④将异常群体选别,对不良品修理,调整或对人员作教育 训练。⑤将处置内容记入异常报告单。 再发防止具体作法:①检讨相关标准(ⅰ、是否有标准?标准明确了没 有?答案若是否定,则增订标准。ⅱ、是否遵守标准?若遵守标准而结果 又不好,则修改标准。ⅲ、标准了解了没有?若不了解则须培训标准。) ②对策愚巧化:若牵涉到要小心,注意、加强等因数,则尽量考虑使用防、 呆的方法。
操作方法有隐患 无标准化 指导书


管理
6、异常发生后操作步骤
6.1、检查现场现物,判断重要性,迅速处理。 6.2、联络关系部署 6.3、迅速确定,进行后工程品质确认; 6.4、进行对象范围把握和不良品排除(不良品分类识别,良品选出等) 6.5、问题严重时,向上司报告——等待指示; 6.6 、追查不合格品源头; 6.7 、联络前后工程,品管部; 6.8 、对发生工程进行对策处置; 6.9 、在此加合格标志,控制流出; 6.10、在合格品到来前点检,选出不合格品; 6.11 、工程内剩余工件及库存品也全数检选出; 6.12 、不合格品必需进行识别; 6.13 、修复是遵守规定。 ; 6.14、排除原因,启动设备; 6.15、研究对策和在发生防止,再次明确指导各工程异常是什么。
应急措施
如遇重大问题或需相关部门共同协商解 决的,由生管主导召开现场会。
应急措施由生管主导,生产、品管共同确认后 方可实施,重大品质问题延误交期的需计划部 确认。根据实际情况决定是否停产或转

SEH结构化异常处理

SEH结构化异常处理

异常处理程序未安装异常
总结词
异常处理程序未安装异常发生在程序试图使用未安装的异常处理程序时。
详细描述
例如,当程序试图使用一个未注册的异常处理函数来处理异常时,就会触发异常处理程 序未安装异常。
03
SEH异常处理过程
异常捕获
异常捕获
在程序运行过程中,当发生异常时,系统会 触发异常捕获机制,将异常信息记录下来, 并传递给异常处理程序。
访问违规异常
总结词
当程序试图访问一个不允许访问的内存区域时,会发生访问违规异常。
详细描述
例如,当程序试图读取一个只写的内存区域,或者写入一个只读的内存区域时,就会触发访问违规异 常。
整数异常
总结词
整数异常通常发生在整数运算过程中, 当结果超出了整数类型的表示范围时。
VS
详细描述
例如,当两个非常大的整数相加,结果超 过了整数类型的最大值时,就会触发整数 异常。
程序稳定性增强
异常处理机制完善
SEH结构化异常处理提供了完善的异常处理 机制,能够有效地捕获和处理运行时错误, 避免程序崩溃或不可预测的行为。
资源释放和清理
在SEH结构化异常处理中,finally块可以确 保在异常发生后正确释放资源并进行清理工
作,有助于提高程序的稳定性和可靠性。
05
SEH结构化异常处理的注意
02
异常处理程序的调用应尽可能靠近异常发生的源头, 以提高异常处理的效率和准确性。
03
在调用异常处理程序时,应提供足够的上下文信息, 以便更好地理解和处理异常。
异常处理程序的返回值
异常处理程序应根据需要返回适当的值,以便在异常发生后能够正确地恢复程序的 执行。
如果异常处理程序需要返回错误码或状态信息,应确保返回值的含义清晰明确,避 免歧义和误解。

SEH(结构化异常处理)

SEH(结构化异常处理)

在许多系统中,编程语言所 提供的异常处理机制的实现,都 是建立在操作系统中所提供的异 常处理机制之上,如Windows平 台上的VC编译器所实现的C++异 常处理模型,它就是建立在SEH 机制之上的 。具体关系图如下:
因此,操作系统平台中所提供的异 常处理机制是非常有必要的。而且,异 常处理机制的实现也是操作系统设计时 的一个重要课题。微软在Windows中引 入SEH的主要动机是为了便于操作系统 本身的开发。操作系统的开发人员使用 SEH,使得系统更加强壮。我们也可以 使用SEH,使我们的自己的程序更加强 壮。
(4) 与C++异常模型相似,try-except模型中,查找 搜索异常模块的规则也是逐级向上进行的。但是稍有 区别的是,C++异常模型是按照异常对象的类型来进 行匹配查找的;而try-except模型则不同,它通过一 个表达式的值来进行判断。如果表达式的值为1( EXCEPTION_EXECUTE_HANDLER),表示找到了异常处理 模块;如果值为0(EXCEPTION_CONTINUE_SEARCH),表 示继续向上一层的try-except域中继续查找其它可能 匹配的异常处理模块;如果值为-1( EXCEPTION_CONTINUE_EXECUTION),表示忽略这个异常 ,注意这个值一般很少用,因为它很容易导致程序难 以预测的结果,例如,死循环,甚至导致程序的崩溃 等。
?顺序执行到finally块区域内的代码这种情况很简单容易理解?goto语句或return语句引发的程序控制流离开当前try块作用域时系统自动完成对finally块代码的调用?由于在try块中出现异常时导致程序控制流离开当前try块作用域这种情况下也是由系统自动完成对finally块的调用无论是第无论是第22种还是第种还是第33种情况毫无疑问它们都会引起很况毫无疑问它们都会引起很大的系统开销编译器在编译此大的系统开销编译器在编译此类程序代码时它会为这两种情类程序代码时它会为这两种情况准备很多的额外代码

Win32结构化异常处理(SEH)探秘(上)

Win32结构化异常处理(SEH)探秘(上)

Win32结构化异常处理(SEH)探秘(上)在 Win32 操作系统提供的所有功能中,使用最广泛但最缺乏文档描述的也许就是结构化异常处理了(SEH),当你考虑Win32 结构化异常处理时,你也许会想到诸如 _try,_finally 以及 _except 这些术语。

你能在任何有关 Win32 的书中发现对 SEH 很好的描述(即使是 remedial)。

即便是 Win32 SDK 也具备有相当完整的使用 _try,_finally 和 _except 进行结构化异常处理的概述。

有了这些文档,那为何还说 SEH 缺乏文档呢?其实,Win32 结构化异常处理是操作系统提供的一个服务。

你能找到的关于 SEH 的所有文档都是描述特定编译器的运行时库,这个运行库对操作系统实现进行包装。

_try,_finally 和 _except 这些关键字没有任何神奇的地方。

微软的操作系统及其编译器系列定义这些关键字和用法。

其他的编译器提供商则只是沿用这些语义。

虽然借助编译器层的 SEH 可以挽回一些原始操作系统级 SEH 处理不良口碑,但在大众眼里对原始操作系统 SEH 细节的处理感觉依旧。

我收到人们大量的e-mail,都是想要实现编译器级的 SEH 处理,又无法找到操作系统功能提供的相关文档。

通常我都是建议参考 Visual C++ 或者 Borland C++ 运行库源代码。

唉,出于一些未知的原因,编译器级的 SEH 似乎是一个大的秘密,微软和 Borland 都不提供其对 SEH 支持的核心层源代码。

在本文中,我将一层一层对 SEH 进行解剖,以便展现其最基本的概念。

我打算通过代码产生和运行时库支持将操作系统提供的功能和编译器提供的功能分开。

当我深入代码考察关键的操作系统例程时,我将使用 Intel 平台上的 Windows NT4.0 作为基础。

但我将要描述的大多数内容同样适用于其它处理器上运行的应用。

我打算避免涉及到真正的 C++ 异常处理,它们使用 catch(),而不是 _except。

异常处理讲解ppt

异常处理讲解ppt

5
采购部反馈供应 商
仓库作区分隔 离存放
生产/QC 作使用 效果根据 供应商
需处理 的产品 入待处 理仓库
质量问 题的产 品入不 良品仓 库
技术部
采购部
责任原因续2
责任原因续3
异常处理汇总
异常处理过程图
来料品质异常通知书
来料品质异常通知书
日期: 厂商名称 来料日期 不良数 不良现象描述: 产品型号 来料数量 不良率 产品规格 抽检数 本月发生次数 年 月 日
检验员:
处理意见: 退货 全检 特采
审核: 不良原因分析:(发生原因和流出原因)
问题解决程序
• • • • • • • • • 当我们观察到或发现到时 这现象是否正常? 跟标准或目标比价的差异 (偏离程度)? 其异常是否不该存在? 为什么会发生异常? 如何改善异常? 如何控制发生异常的原因?
现象
确认并定义问题
例如: 人员的出勤率90%
问题
请假人员太多 分析问题
原因
设定改善目标并形成解决方案

• 4,实施并验证临时性纠正措施: • 验证和执行临时控制行动以将问题的影响同内部和外部的顾客隔离开, 临时行动将执行到永久性纠正计划采用为止,确认临时行动的有效性。 • 5,确定和验证问题的根本原因: • 通过测试每个根本原因对问题描述来隔离和验证根本原因,同时隔离 和验证根本原因的影响能在过程中被检测和控制的地方。 • 6,实施和确认永久性措施。 • 计划和执行选取的永久性纠正措施。去除临时性行动。验证永久性纠 正措施并监控长期的效果。 • 7,防止问题再次发生。 • 修改必需的系统包括政策,程序等来防止同一或相似问题的再发生, 如果需要对系统改进提出建议,并将学到的技术教训形成文件。 • 8,表彰小组和个人的贡献

异常处理流程PPT课件( 24页)

异常处理流程PPT课件( 24页)
二.客戶端QE人員復判狀況
• 按排QE人員至客戶端復判,若不良按排人員sorting客戶端的 庫存;(須依據不良D/C,單一SKU進行sorting )
• 三.不良品廠內分析
• QE/PE——復判分析不良品; • QE——根據分析結果進行處理。
一.接到客訴反應
掌握時效 a.先與客戶確定問題 b.處理時間確認 c.人力安排
2 客訴異常處理流程
客戶端製程問題
告知SQE此問題Heisei不會造成此問題的發生。
2 客訴異常處理流程
HEISEI製程漏失問題
1.安排人員進行重工客戶端的庫存及厰内的庫存; 2.清查客戶端及廠內庫存回報主管 ; 3.如須重工須與PE確認重工手法、重工批量與物料確認待重工 數量; 4.如須重工須與PE確認重工手法、重工批量與物料確認待重工 數量; 5.如需安排人員外出重工﹐須安排車輛接送重工人員; 6.每日重工結果須填寫Sorting單回報給主管.

14、给自己一份坚强,擦干眼泪;给自己一份自信,不卑不亢;给自己一份洒脱,悠然前行。轻轻品,静静藏。为了看阳光,我来到这世上;为了与阳光同行,我笑对忧伤。

15、总不能流血就喊痛,怕黑就开灯,想念就联系,疲惫就放空,被孤立就讨好,脆弱就想家,不要被现在而蒙蔽双眼,终究是要长大,最漆黑的那段路终要自己走完。
召集所有相關單位進行開會 (目的預防後期再發生同樣的問題)。
2 客訴異常處理流程
原材材料問題 要求廠商人員進行重工客戶端的庫存及厰
内的庫存,並提出後續的改善措施及改善後 的標示。
要求PE製作管控圖片發于相關部門,並進 行協助廠商管控。


The End

5、世上最美好的事是:我已经长大,父母还未老;我有能力报答,父母仍然健康。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

-
10
SEH实际包含两个主要功能:
• 结束处理( termination handling )
• 异常处理( exception handling )
-
11
结束处理
一个结束处理程序能够确保去调用和执行一个代 码块(结束处理程序,termination handler),而不 管另外一段代码(保护体,guarded body)是如何退 出的。结束处理程序的文法结构(使用微软的Visual C++编译程序)如下:
// 直接跳出当前的__try作用域 __leave;
程序中利用__leave关键
p = 0;
字,在执行错误语句p=0;
*p = 25; } __finally {
*p=25;之前,马上离开当前 的__try块作用域 ,避免了“ 局部展开” 的额外开销 。
puts("__finally块中"); } puts("world"); }
壮。
-
6
使用SEH的好处就是当你编 写程序时,只需要关注程序要完 成的任务。如果在运行时发生什 么错误,系统会发现并将发生的 问题通知你。这样的分离,可以 使你集中精力处理眼前的工作, 而将可能发生的错误放在后面处 理。
-
7
我们虽然都知道,SEH是 Windows系列操作系统平台提供 的一种非常完善的异常处理机制。 但这毕竟有些过于抽象了,对于 程序员而言,它应该有一套类似 于像C++中那样的try,catch,throw 等几个关键字组成的完整的异常 处理模型。
• goto语句或return语句引发的程序控制流离 开当前__try块作用域时,系统自动完成对 __finally块代码的调用
• 由于在__try块中出现异常时,导致程序控 制流离开当前__try块作用域,这种情况下 也是由系统自动完成对__finally块的调用
-
15
无论是第2种,还是第3种情 况,毫无疑问,它们都会引起很 大的系统开销,编译器在编译此 类程序代码时,它会为这两种情 况准备很多的额外代码。
-
8
SHE确实也有类似的语法,它由 如下几个关键字组成: __try __except __finally __leave
-
9
注意!
不要将结构化异常处理同C++的异常 处理相混淆。C++异常处理是一种不同形 式的异常处理,其形式是使用C++关键字 catch和throw。微软的Visual C++支持 C++的异常处理,并且在内部实现上利用 了已经引入到编译程序和Windows操作系 统的结构化异常处理的功能。
-
3
在许多系统中,编程语言所 提供的异常处理机制的实现,都 是建立在操作系统中所提供的异 常处理机制之上,如Windows平 台上的VC编译器所实现的C++异 常处理模型,它就是建立在SEH 机制之上的 。具体关系图如下:
-
4
-
5
因此,操作系统平台中所提供的异 常处理机制是非常有必要的。而且,异 常处理机制的实现也是操作系统设计时 的一个重要课题。微软在Windows中引 入SEH的主要动机是为了便于操作系统 本身的开发。操作系统的开发人员使用 SEH,使得系统更加强壮。我们也可以 使用SEH,使我们的自己的程序更加强
-
13
来看一个简单的程序:
#include <stdio.h> void main() { puts("hello"); __try { puts("__try块中");
程序运行结果如下: hello __try块中 __finally块中 Press any key to continue
// 注意,下面return语句直接让函数返
来看一个简单的例子:
-
17
#include <stdio.h> void main() { puts("hello");
程序运行结果如下: hello __try块中
__try
__finally块中
{ int* p; puts("__try块中");
world Press any key to continue
一般第2种情况,被称为 “局部展开”;第3种情况,被 称为“全局展员完全可以有效地 避免它,避免“局部展开”引起的不必要的 额外开销。在一个函数中,可能有多处的 return语句。针对这种情况,SEH提供了一种 非常有效的折衷方案,那就是__leave关键字 所起的作用,它既具有像goto语句和return语 句那样类似的作用(由于检测到某个程序运 行中的错误,需要马上离开当前的__try块作 用域),但是又避免了“局部展开” 的额外 开销。
建议大家在编程时不妨多 用__leave关键字来提高程序 的性能。
-
18
结束处理小结:
• 1、 “不管在何种情况下,在离开当前的作用 域时,finally块区域内的代码都将会被执行到”, 这是核心法则。
-
12
__ try和__ finally关键字用来标出 结束处理程序两段代码的轮廓。在上面 的代码段中,操作系统和编译程序共同 来确保结束处理程序中的__ finally代码 块能够被执行,不管保护体(__try块) 是如何退出的。不论你在保护体中用 return,还是goto,或者是longjump, 结束处理程序(__finally块)都将被调 用。
SEH(结构化异常处理)
-
1
SEH
(“Structured Exception Handling”),
即结构化异常处理.是Windows 操作系统提供给程序设计者的强 有力的处理程序错误或异常的武 器。
-
2
大家都知道,在C++中有较 完善的异常处理机制,同样在C 语言中也有很不错的异常处理机 制来支持。那么为什么现在此处 还在讨论操作系统平台中所提供 的异常处理机制呢?
回了 return;
由此可见:
} __finally {
不管在何种情况下,在离 开当前的作用域__finally
puts("__finally块中"); } puts("world");
块区域内的代码都将会被 执行到
}
-
14
__finally块被执行的流程,无外乎三种情况:
• 顺序执行到__finally块区域内的代码,这种 情况很简单,容易理解
相关文档
最新文档