软件调试——CPU异常列表

CPU异常主要分为三类:错误类异常,陷阱类异常和终止类异常

1 错误类异常 Fault

CPU遇到该类异常后,会先将CS和EIP(当前发生错误的指令,而不是下一条指令)压栈,然后跳到异常处理函数中,执行完成后恢复到原位置重新执行该指令,如果还有错误,还会再进。

例如内存缺页异常就是错误类异常,CPU遇到缺页异常时会跳转到异常处理,将缺少的内存页从物理内存中置换回来,再恢复重新执行内存访问指令。

 

2 陷阱类异常 Trap

CPU遇到该类异常后,会将CS和EIP压栈,这个EIP就是当前指令的下一条指令的地址,注意的是下一条指令可能不是相邻的指令,如果导致异常的是跳转类指令,下一条指令可能会很远。

我们经常使用的INT 3就是陷阱类异常。

 

3 终止类异常 Abort

该类异常用于报告严重的错误,比如硬件错误和系统表中包含非法值或不一致的状态等。大多数终止异常可能是由于堆栈操作不当造成的,例如压栈和出栈不匹配,操作系统会将此类异常当做程序错误来处理,终止导致此类异常的程序。

 

4 异常列表

向量号助记符类型描述来源
0#DE错误除零错误DVI和IDIV指令
1#DB错误/陷阱调试异常,用于软件调试任何代码或数据引用
2 中断NMI中断不可屏蔽的外部中断
3#BP陷阱断点INT 3指令
4#OF陷阱溢出INTO指令
5#BR错误数组越界BOUND指令
6#UD错误无效指令(没有定义的指令)UD2指令(奔腾Pro CPU引入此指令)或任何保留的指令
7#NM错误数学协处理器不存在或不可用浮点或WAIT/FWAIT指令
8#DF终止双重错误(Double Fault)任何可能产生异常的指令、不可屏蔽中断或可屏蔽中断
9#MF错误向协处理器传送操作数时检测到页错误(Page Fault)或段不存在,486及以后集成了协处理器,本错误就保留不用了浮点指令
10#TS错误无效TSS任务切换或访问TSS
11#NP错误段不存在加载段寄存器或访问系统段
12#SS错误栈段错误栈操作或加载SS寄存器
13#GP错误通用/一般保护异常,如果一个操作违反了保护模式下的规定,而且该情况不属于其他异常,CPU就是认为是该异常任何内存引用或保护性检查
14#PF错误页错误任何内存引用
15保留   
16#MF错误浮点错误浮点或WAIT/FWAIT指令
17#AC错误对齐检查对内存中数据的引用(486CPU引入)
18#MC终止机器检查(Machine Check)错误代码和来源与型号有关(奔腾CPU引入)
19#XF错误SIMD浮点异常SIMD浮点指令(奔腾III CPU引入)
20~31保留   
32~255用户自定义中断中断可屏蔽中断来自INTR的外部中断或INT n指令
posted on 2016-09-09 16:07 随鑫所欲 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/atlaser/p/5857040.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值