使用带有x86 IDT的Task Gate,处理内核模式(ring 0)堆栈错误异常的唯一方法是什么?

时间:2013-10-13 09:59:44

标签: exception-handling kernel

假设内核始终在Ring 0权限级别执行。对于堆栈故障异常(由于堆栈溢出或限制违规),哪个门应该用于从陷阱门,中断门和任务门设置x86 IDT(中断描述符表)?

X86处理器在调用堆栈错误异常处理程序之前需要堆栈来推送eflags,CS,eip on stack。这意味着需要Stack开关来调用异常处理程序。

使用任务门是执行堆叠交换的唯一方法吗?

使用Task Gate是为内核堆栈错误编写堆栈错误处理程序的唯一方法吗?

英特尔手册写道 - “新的tss允许处理程序在处理异常或中断时使用新的特权级别0堆栈。如果在当前特权级别0堆栈损坏时发生异常或中断,则通过任务门访问处理程序可以防止系统崩溃通过为处理程序提供新的特权级别0堆栈“。

提前感谢您的回复。

1 个答案:

答案 0 :(得分:1)

据我所知,是的。想象一下它是如何工作的:

  1. 你溢出了你的筹码。
  2. 调用GPF处理程序,但由于R0堆栈已损坏,因此无法执行任何操作。
  3. 进程尝试调用Double Fault处理程序,但不能。
  4. 过程三重故障。
  5. 如果您有TSS,则完成以下操作:

    1. 你溢出了你的筹码。
    2. 处理器尝试调用GPF处理程序,从而产生taskwitch
    3. 处理器切换任务,从而产生新的堆栈。
    4. 一切都正常。