1.中断与异常
在计算机的世界里,不存在一丝温度.
它只会沿着写好的代码,心无旁骛地执行下去,这是它的优点,也是它的缺点--因为写代码的人不可能把所有意外情况都考虑周全.
比如说,你要求计算机走一万步,那他就只会走一万步,不管路上是否有车,是否会对自己的安危产生威胁.
鉴于这种情况,人们很聪明地发明了一种机制---中断与异常.
中断与异常,在原理上是一样的:在计算机运算的时候,如果遇到突发情况,比如说BUG,硬件损坏.死循环等.这时计算机会主动跳转到一个专门处理突发情况的代码区域,对不同的突发情况进行处理.
而这种突发情况,我们可以分为两种:
一种是计算机遇到突发情况,自发跳转.这种情况,我们称之为"异常".
一种是我们在计算机运行的过程中,通过外部设备人为地截断计算机运行,比如说强制关机,任务管理器强制关闭等,这种情况,我们称之为"中断".
2. IDT
中断和异常,虽然截断方式不同,但它们最终是由操作系统统一管理.
根据不同的情况,中断与异常这两种情况之下,还可以进行进一步的细分.而操作系统负责为每一种细分的情况都提供一种处理函数.这些处理函数,学名叫陷阱处理器.
那么,操作系统(或者更深入地讲,是CPU)是如何将每一种细分情况,与每一种处理函数,一一对应的呢?
这时,我们就采用了一种最原始的方法,写一个表格,把细分情况与处理函数一一对应的关系,都写在上面.
而这个表,就叫做IDT
操作系统在启动的时候,最早的任务,就是准备好这样的一张IDT表,以便应付接下来可能出现的突发情况.
我们可以通过两种方式查询到这张表:
第一,使用windbg配合VirtualKD配置好双机调试环境,加载完符号,输入命令!idt /a
(搞这个环境时,加载符号是个坑,加载的命令是SRV*C:\symbols*
http://msdl.microsoft.com/download/symbols,同时要把reload的勾给打上.不过最后我还是没能执行!idt /a的命令,原因极有可能出在加载符号上.)
第二步,使用PC-Hunter查看IDT
这个方法我还没尝试,暂且略过.
网友评论