更改中断向量表

时间:2016-05-06 11:35:57

标签: cpu operating-system c interrupt

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

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

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

1 个答案:

答案 0 :(得分:7)

中断向量表只是放在内存中的项目 1 的数组。如果您的程序具有root权限,则可以写入/dev/mem并更改 IVT 的内容。

然而,回火, IVT 并不足以接近工作钩:你首先要找到 IVT 2 然后计算输入的正确值 3 。因为root通常不够,你可以使用C程序来调整 IVT ,但是你可能需要编写一个内核模块来拥有一个working hook

挂钩 IVT 的非常具体的方式取决于所选的架构,您可以参考特定的 CPU手册和平台 Datasheets 只是谷歌搜索他们。

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

<子> 1 x86 保护和长模式 ARM 中的实模式描述符中使用远指针>和 PowerPC 使用说明, MIPS 实际上没有IVT。

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

<子> 3 为了准确起见,我们需要稍微过于技术性,引入 MMU 的概念,地址转换,指令制作,蹦床和流程上下文(您的例程基本上是孤立的,因为它可以在任何其他进程上下文)。

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