更改中断向量 Table

Changing the Interrupt Vector Table

在我的一次大学讲座中,我们讨论了挂钩和更改中断向量的可能性 table (IVT)。

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

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

中断向量Table只是一个数组1放在内存中的某处。如果您的程序有 root 权限,它可以写入 /dev/mem 并更改 IVT 的内容。

然而回火,IVT 不是均匀接近足以有一个工作钩子:你必须首先找到 IVT 2,然后计算要放入其中的正确值3。作为 root 通常 不够 不过,您可以使用 C 程序调整 IVT,但您可能需要编写一个 内核模块 有一个 working hook.

挂接 IVT 的非常具体的方法取决于选择的体系结构,您可以参考特定的 CPU 手册 和平台 Datasheets 只需谷歌搜索即可。

挂钩 IVT 实际上可能用作 escalation 的一部分,而不是向 OS4[= 添加功能73=].


1 x86 实模式 中使用远指针,在 保护和长模式中使用 描述符 ARMPowerPC使用指令,MIPS并没有真正的IVT。

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

3 为了在这里准确,需要有点太技术性,引入 MMU 的概念、地址转换、指令制作、蹦床和进程上下文(你的例程本质上是孤立的,因为它可以在任何其他进程上下文中为 运行)。

4 值得注意的是,“对抗OS*通常是一个付出很少或没有付出的上坡路,与其改变精心打造的OS结构,还不如使用相关的API。