[工学]毕业设计异常处理.doc
《[工学]毕业设计异常处理.doc》由会员分享,可在线阅读,更多相关《[工学]毕业设计异常处理.doc(59页珍藏版)》请在三一办公上搜索。
1、漳州师范学院 毕业论文(设计)异常处理 EXCEPTION HANDLING姓 名: 张妙平 学 号: 050811131 系 别: 计算机科学与工程系 专 业: 计算机科学与技术 年 级: 05级 指导教师: 王桃发 2009 年 3 月 28 日摘要异常处理是程序开发的一个重要内容,异常处理的好坏关系到程序的友好程序和系统的稳定性.C+是一种纯面向对象的编程语言,其异常处理机制和普通的编程语言有很多不同的地方,有力地增强了C+程序的健壮性和容错性.关键字: C+;异常处理;面向对象编程;健壮性;容错性Abstract Exception handling plays a significa
2、nt role in programming development.Its performance will influence the friendliness and stability of the system.As a complete object obriented programming language, the exception handling mechanism of C+ is very different from other programming language,and effectively improves robustness and toleran
3、ce of the programs.Key words:C+;Exception handling;object obriented programming;robustness;toleranceII目录中英文摘要(I)1.前言(1)1.180386的中断和异常(1)1.2Windows结构化异常处理(SEH)(1)1.3C+中异常处理(2)1.4病毒的分类(3)1.5计算机病毒的命名(4)1.6计算机病毒的工作过程(4)1.7计算机病毒的传染(4)2.蠕虫病毒(7)2.1蠕虫病毒的定义(7)2.2网络蠕虫病毒分析和防范(9)2.3经典蠕虫病毒尼姆达(Nimda)解析(12)3.尼姆达(N
4、IMDA)蠕虫病毒的查杀(18)3.1前言(18)3.2杀毒软件的扫描方法(18)3.3反病毒技术(21)3.4尼姆达(Nimda)蠕虫病毒嗅探器的设计(25)3.5 结果(31)3.6尼姆达(Nimda)蠕虫病毒解决方法(33)3.7防范措施(33)4.总结(35)致 谢(36)参考文献(37)附录(38)1.前言1.180386的中断和异常 8086/8088把中断内部中断和外部中断两大类.为了支持多任务和虚拟存储器等功能.80386把外部中断称为”中断”,把内部中断称为”异常”.与8086/8088一样,80386通常在两条指令之间响应中断或异常;80386最多处理256种中断或异常.1
5、.1.1中断对80386而言,中断是由异步的外部事件引起的.外部事件及中断响应与正执行的指令没有关系.通常,中断用于指示I/0设备的一次操作已完成.与8086/8088一样,80386有两根引脚INTR和NMI接受外部中断请求信号.INTR接受可屏蔽中断请求.NMI接受不可屏蔽中断请求.在80386中,标志寄存器EFLAGS中的IF标志决定是否屏蔽可屏蔽中断请求. 外部硬件在通过INTR发出中断请求信号的同时,还要向处理器给出一个8位(28=256)的中断向量号.处理处理器在响应可屏蔽中断请求时,读取这个由外部硬件给出的中断向量号.处理器对这个中断向量号并没有规定.但在具体的微机系统中,系统必
6、须通过软件和硬件的配合设置,使得给出的这个中断向量号不仅与外部中断源对应,而且要避免中断向量号使用冲突情况的出现.可编程中断控制器芯片8259A可配合80386工作,能够根据设置向处理器提供上述这个中断向量号和还能处理中断请求的优先级.每个8259A芯片可以支持8路中断请求信号,如果使用9个8259A芯片,就可使80386在单个引脚INTR上接受多达64个中断源的中断请求信号. 处理器不屏蔽来自NMI的中断请求.处理器在响应NMI中断时,不从外部硬件接受中断向量号.与8086/8088一样,80386中,不可屏蔽中断所对应的中断向量号固定为2.为了避免不可屏蔽中断的嵌套,每当接受一个NMI中断
7、,处理器就在内部屏蔽了在次响应NMI,这一屏蔽过程直到执行中断返回指令IRET后才结束.所以,NMI处理程序应以IRET指令结束. 1.1.2 异常异常是80386在执行指令期间检测到不正常的或非法的条件所引起的.异常与正执行的指令有直接的联系.例如:执行除法指令时,除数为0.再如,执行指令时发现特权级不正确.当发生这些情况时,指令就不能成功完成.软中断指令”INT n”和”INTO”也归类于异常而不称为中断,这是因为执行这些指令产生异常事件.80386识别多种不同类别的异常,并赋予每一种类别不同的中断向量号.异常发生后,处理器就象响应中断那样处理异常.也即,根据中断向量号,转响应的中断处理程
8、序.把这种中断处理程序称为异常处理程序可能更合适.根据引起异常的的程序是否可被恢复和恢复点不同,把异常进一步分类为故障(Fault),陷阱(Trap),中止(Abort).我们把对应的异常处理程序分别称为故障处理程序,陷阱处理程序和中止处理程序.故障是在引起异常的指令之前,把异常情况通知给系统的一种异常.80386认为故障是可排除的.当控制转移到故障处理程序时,所保存的断点CS及EIP的值指向引起故障的指令.这样,在故障处理程序把故障排除后,执行IRET返回到引起鼓掌的程序继续执行时,刚才引起故障的指令可重新得到执行.这种重新执行,不需要操作系统软件的额外参与.故障的发现可能在指令开始执行之前
9、,也可能在指令执行期间.如果在执行指令期间检测到故障,那么中止故障指令,并把指令的源操作数恢复为指令开始执行之前的值.这可保证故障指令的重新执行得到正确的结果.例如,在一条指令的执行期间,如果发现段不存在,那么停止该指令的执行,并通知系统产生段故障.对应的段故障处理程序可通过加载该段的方法来排除故障,之后,原指令就可以成功执行,至少不在发生段不存在故障.陷阱是在引起异常的指令之后,把异常情况通知给系统的一种异常.当控制转移到异常处理程序时.所保存的断点CS和EIP的值指向引起陷阱的指令的下一条要执行的指令.下一条要执行的指令,不一定就是下一条指令.因此,陷阱处理程序并不是总能根据保存的断点,反
10、推确定出产生异常的指令.在转入陷阱处理程序时,引起陷阱的指令应正常完成,它有可能改变了寄存器或存储单元.软中断指令,单步异常是陷阱的例子.中止是在系统出现严重情况时,通知系统的一种异常.引起中止的指令是无法确定的.产生中止时正执行的程序不能被恢复执行.系统接受中止后,处理程序要重新建立各种系统表格,并可能需要重新启动操作系统.硬件故障和系统表中出现非法值或不一致值是中止的例子.1.1.3 优先级 在一条指令执行期间,如检测到不止一个中断或异常,那么按表10.6所列优先级通知系统.把优先级最高的中断或异常通知系统,其他优先级较低的异常被废止,而优先级较低的中断则保持悬挂.1.1.4 异常类型 象
11、中断分为多种类型一样,异常也分为多种类型.80386识别的多种不同类型的异常及赋予的对应中断向量号列于表10.7.某些异常还以出错码的形式提供一些附加的信息传递给异常处理程序,出错代码列中的”无”表示没有出错代码,”有”表示有出错代码.8088中断向量号和80386中断向量号发生冲突.实际上,Intel 在宣布8086/8088时,保留了这些发生冲突的中断向量号.尽管发生这样的冲突,但以80386为CPU的微机系统仍可保持与以8088为CPU的微机系统的兼容.原因是在80386的实方式下,几乎不会发生那些中断向量号与外部硬件在提出中断请求时所提供的中断向量号存在冲突的异常.故障类异常当发生故障
12、,控制转移到故障处理程序时,所保存的断点CS及EIP的值指向引起故障的指令,以便在排除故障后恢复执行.(1)除法出错故障(异常0) 除法出错是一种故障,当执行DIV指令或IDIV指令时,如果除数等于0,或者商太大,以至于存放商的操作数容纳不下,那么产生这一故障.除法出错不提供出错码.(2)边界检查故障(异常5) 如果BOUND指令发现被测试的值超出了指令中给顶的范围,那么发生边界检查故障,边界检查故障不提供出错码.(3)非法操作码故障(异常6) 如果80386不能把CS及EIP所指存储单元处的位模式识别为某条指令的部分,那么就发生非法操作码故障.当出现下列情况时,发生这样的故障:1.操作码字段
13、的内容不是一个合法的80386指令的代码.2.要求使用存储器操作数的场合,使用了寄存器操作数.3.不能被加锁的指令使用了LOCK前缀. 非法操作码故障不提供出错码.(4)设备不可用故障(异常7) 设备不可用故障支持80387数字协处理器.在没有80387协处理器硬件的系统中,可用该异常的处理程序代替协处理器的软件模拟器.在发生任务切换时,使得只有在新任务使用浮点指令时,才进行80387寄存器状态的切换.设备不可用故障不提供出错码.该故障在下列情况下产生:1.在执行浮点指令时,控制寄存器CR0中的EM位或TS为1;2.在执行WAIT指令时,控制寄存器CR0中TS位及EM位都为1.(5)段不存在故
14、障(异常0BH) 处理器在把描述符装入非SS段寄存器的高速缓冲器时,如果发现描述符其他发面有效,而P位为0(表示对应段不存在),那么就发生段不存在故障.有关SS段的情形纳入堆栈段故障.在进入故障处理程序时,保存的CS及EIP指向发生故障的指令;或者该故障作为任务切换的一部分发生时,指向任务的第一条指令. 段不存在故障提供一个包含引起该异常的段选择子的出错码.出错码的格式如图: 16位出错码的主要成分是选择子,高13位是选择子的索引部分,TI位是描述符表指示位.图所示出错码格式是段异常出错码的一般格式.从图中可见出错码中不含选择子的RPL,而由IDT位和EXT位代替.当处理某一异常或外部中断时,
15、又发生了某种异常,那么EXT位置1.当从中断描述符表IDT读出表项并产生异常时,IDT位置1.这只在中断或异常的处理期间才会发生.当没有选择子时,构成出错码选择子部分的值为0.(6)堆栈段故障(异常0CH)当处理器检测到用SS寄存器进行寻址的与段有关的某种问题时,就发生堆栈段故障.在进入故障处理程序时,保存的CS和EIP指向发生故障的指令;或者该故障作为任务切换的一部分发生时,指向任务的第一条指令.堆栈段故障提供一个出错码,出错码的一般格式也如图所示. 具体地说,当出现下列三种情况时,将引起堆栈段故障.1.在堆栈操作时,偏移超出段界限所规定的范围,这种情况下的出错码是0.例如,PUSH操作时,
16、堆栈溢出.2.在由特权级变换所引起的对内层堆栈的操作时,偏移超出段界限所规定的范围. 这种情况下的出错码包含有有内层堆栈的选择子.3装入到SS寄存器(高速缓冲寄存器)的描述符的存在位为0.这种情况下的出错码包含有对应的选择子. 上述的第一种情况是最容易辨别的.第二和第三种情况的辨别要通过出错码所含选择子所示的描述符中的存在位进行.如果存在位为1,那么是第二种情况;否则是第三种情况.(7)无效TSS故障(异常0AH)当正从任务状态TSS装入选择子时,如果发生触了不存在故障以外的段异常时,就发生无效TSS故障.在进行故障处理程序时,保存的CS及EIP指向发生故障的指令,或者该故障作为任务切换的一部
17、分发生时,指向任务的第一条指令.无效TSS故障提供一个出错码,出错码的格式如图.其中选择子部分是指向引起故障TSS的选择子.一些引起无效TSS故障的原因如下:TSS描述符中的段限长小于103.无效的LDT描述符,或者LDT未出现;堆栈段不是一个可写段;堆栈段选择子索引的描述符超出描述符表界限.堆栈段DPL与新的CPL不匹配;堆栈段选择子RPL不等于CPL.代码段选择子索引的描述符超出描述符表界限.代码段选择子不指向代码段;非一致代码段的DPL不等于新的CPL.一直代码段DPL大于新的CPL.对应DS,ES,FS或GS的选择子指向一个不可读段;对应DS,ES,FS或GS的选择子索引的描述符超出描
18、述符表界限.(8)通用保护故障(异常0DH)除了明确列出的段异常外,其他的段异常都被视为通用保护故障.在进入故障处理程序时,保存的CS及EIP指向发生故障的指令;或者作为该故障作为任务切换的一部分发生时,指向任务的第一条指令.通用保护故障提供一个出错码,出错码的一般也如图:根据处理程序可能进行的响应,通用保护故障可分为如下两类:1.违反保护方式,但程序无须终止的异常.这类故障提供的出错码是0.这种异常在应用程序执行特权指令或I/0访问时发生,支持虚拟8086程序的系统或支持虚拟I/0访问的系统,需要模拟这些指令,并在模拟完成产生故障的指令后,重新执行被中断的程序.2.违反保护方式,并导致程序终
19、止的异常.这类故障提供的出错码可能为0,也可能不为0(能确定选择子时).引起这类故障的一些原因如下:向某个只读数据段或代码段写;从某个只能执行的代码段读出.将某个系统段描述符装入到数据段寄存器DS,ES,FS,GS或SS;将控制转移到一个不可执行的段.在通过段寄存器CS,DS,ES,FS或GS访问内存时,偏移越出段界限;当访问某个描述符表时,超过描述符表段界限;把PG为为1但PE位为0的控制信息装入到CR0;切换到一个正忙的任务.对上述两类通用保护故障的辨别,可通过检查引起故障的指令和出错码进行.如果出错码非0,那么肯定是第二类通用保护故障.如果出错码是0,那么需进一步检查引起故障的指令,以确
20、定它是否是系统支持的可以模拟的指令.(9)页故障(异常0EH)(10)协处理器出错(异常10H)协处理器出错故障指示协处理器发生了未被屏蔽的数字错误,如上溢或下溢.在引起故障的浮点指令之后的下一条浮点指令或WAIT指令,把协处理器出错作为一个故障通知给系统.协处理器出错故障不提供出错码.陷阱类异常(1)调试陷阱(异常1) 调试异常有故障类型,也有陷阱类型.调试程序可以访问调试寄存器DR6,以确定调试异常的原因和类型.调试异常不提供出错码.(2)单字节INT3(异常3)INT3是一条特别的一字节”INT n”指令.调试程序可个该指令支持程序断点.INT 3指令被看成是一种陷阱,而不是一个中断.当
21、由于执行INT 3指令而进入异常3处理程序时,被保存的CS和EIP指向紧跟INT3的指令,也即INT 3指令后面的一个字节.INT3陷阱不提供出错码.(3)溢出(异常4)INTO指令提供条件陷阱,如果OF标志为1,那么INTO指令产生陷阱;否则不产生陷阱,继续执行INTO后面的指令.在进入溢出处理程序时,被保存的CS和EIP指向INTO指令的下一条指令.溢出陷阱不提供出错码.中止类异常(1)双重故障异常(异常8) 当系统正在处理一个异常时,如果又检测到一个异常,处理器试图向系统通知一个双重故障,而不是通知第二个异常.双重故障被分在中止异常那一类,所以在转入双重故障处理程序时,被保存的CS和EI
22、P可能不指向引起双重故障指令,而且指令的重新启动不支持双重故障.双重故障提供的出错码是0. 当正处理一个段故障异常时,有可能又产生一个页故障.在这种情况下,通知给系统的是页故障异常而不是双重故障异常.但是,如果正处理一个段或页故障时,又一个段故障被检测到;或者如果正处理一个页故障时,又一个页故障被检测到,那么就引起双重故障.当正处理一个双重故障时,又一个段或页故障被检测到,那么处理器暂停执行指令,并进入关机方式.关机方式类似与处理器执行一条HLT指令后的状态:处理器空转,并维持到处理器接受到一个NMI中断请求或者被重新启动为止.在关机方式下,处理器不响应INTR中断请求.双重故障通常指示系统表
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 工学 毕业设计 异常 处理
链接地址:https://www.31ppt.com/p-4533123.html