更改中断向量表

Chr*_*ris 1 c cpu operating-system interrupt

在我的一次大学讲座中,我们讨论的是挂钩和改变中断向量表(IVT)的可能性.

我们的教授说,具有root权限的程序能够更改IVT,并且可以使用此功能,例如作为每个按键的键记录器.

这是否意味着我可以使用例如C程序改变我的IVT?或者它是如何工作的?

Mar*_*oom 7

中断矢量表仅仅是项目的数组1中存储器某处放置.如果您的程序具有root权限,它可以写入/dev/mem并更改IVT的内容.

然而,回火,IVT并不足以接近一个工作钩:你首先找到IVT 2,然后计算正确的值以放入它3.虽然root是不够的,你可以使用C程序来调整IVT,但是你可能需要编写一个内核模块才能有一个工作钩子.

挂钩IVT的具体方式取决于所选择的架构,您可以通过简单的谷歌搜索来参考特定的CPU手册和平台数据表.

挂钩IVT实际上可以用作升级的一部分,而不是向OS 4添加功能.


1 86使用远指针实模式描述符保护和长模式,ARMPowerPC的使用说明,MIPS并没有真正有一个IVT.

2x86中,它可以在任何地方,您需要使用特权指令lidt.在ARM它可以是在固定位置,或者它可以通过使用像寄存器的移动VTORVBAR.从中读取是特权操作.在PowerPC中,它可以位于由MSR寄存器确定的两个固定位置,同样是特权寄存器.在MIPS中,实际上没有IVT,并且位置是固定的.无论如何,为了执行特权指令,你需要创建一个内核模块,root是不够的.

3 为了准确起见,需要稍微过于技术性,介绍MMU的概念,地址转换,指令制作,蹦床和过程上下文(您的例程基本上是孤立的,因为它可以在任何其他过程上下文中运行).

4 值得注意的是,"反对操作系统*通常是一个上涨的斜坡,付出很少或根本没有,而不是改变精心设计的操作系统结构,最好使用相关的API.