什么是触发0x08中断?

时间:2013-12-19 17:53:15

标签: c timer linux-kernel x86-64

我正试图劫持定时器中断。一位同事告诉我,IDT(中断描述符表)上的中断0x08是定时器。我检查了一些诅咒并看到了两个可能的答案:this表示8是real clock timerthis表示它是Double Fault中断 - 我决定相信他而不是浪费时间进一步检查。在最终控制IDT并替换中断8之后,没有任何事情发生。

  • 那是怎么回事?
  • 这个中断是否会随着时间的推移从定时器改为双重故障?
  • 此中断在ARM / Intel / etc上有不同用途吗?

我的代码是一个内核模块,它劫持中断8,并在每次中断到达时简单地执行printk命令。我跑了大约25分钟 - dmesg没有输出。

如果重要:我在VM上运行带有内核3.8的Linux Mint。主机有Intel i5。

2 个答案:

答案 0 :(得分:1)

您可以使用以下命令找到定时器的中断:cat / proc / interrupt

以下是6核机器上的示例输出:

cat /proc/interrupts | egrep "timer|rtc"
   0:  320745126          0          0          0          0          0   IO-APIC-edge      timer
   8:          1          0          0          0          0          0   IO-APIC-edge      rtc0
 LOC:  115447297  304097630  194770704  212244137   63864376   69243268   Local timer interrupts

注意,计时器和rtc是不同的。到目前为止,只有一个rtc中断。 (很多计时器中断)。以下是正常运行时间输出。

 uptime
 14:14:20 up 13 days,  3:58,  9 users,  load average: 0.47, 1.68, 1.38

我认为你应该在攻击IDT之前检查一下。此外,您可能想要破解中断0,而不是8。

答案 1 :(得分:0)

您发现了同一IRQ的两个描述,因为在保护模式下,地址范围0x0-0x1F保留供内部CPU中断使用。

您必须将IRQ重新映射到另一个地址空间而不会发生冲突,在本文中,您可以找到它的解释以及所需的所有源代码:

https://alfaexploit.com/readArticle/416