x86中断表修改

时间:2012-05-01 23:27:56

标签: assembly x86 x86-64 interrupt

我正在编写自己的保护模式操作系统,需要知道如何修改中断表,以便将某些(打印字符串等)重定向到命令提示应用程序或其他应用程序。如何修改表格?

1 个答案:

答案 0 :(得分:2)

首先,使用中断进行系统调用实际上并不是实际实现它们的“好方法”。如果您的目标是x64,那么您一定要查看SYSCALLSYSRET,这样可以非常方便(从用户的角度来看)调用内核代码,前提是您愿意处理使用这两个需要一些设置例程。如果这不是一个选项,请考虑将一些内核代码映射到进程的虚拟内存空间。谷歌让linux-gate.so.1阅读有关该示例实现的示例。

但是,如果您仍想通过中断实现系统调用,请继续阅读。当然,您可能需要以任何方式修改中断表,以便实际与硬件进行交互。

在x86的保护模式中,中断位于IDT中,IDT是中断描述符表的缩写。该表可以包含任务门描述符,中断门描述符或陷阱门描述符。该表以与实模式中断向量表类似的方式索引 - 例如表的n条目包含将用于服务中断n的描述符。中断和陷阱门实际上只是指向带有一些额外数据的中断例程代码的指针,而任务门包含一个任务状态段选择器,它是应该处理该中断的任务的选择器。在64位模式下,由于硬件任务处理的弃用,仅支持中断/陷阱门。

我真的没有看到重写英特尔手册的重点,英特尔手册非常清楚地解释了这些问题,所以我建议你have a read(尽管你现在应该有这些手册)。中断处理在该文档的第6章中描述。