C 触发0x08中断的是什么?
我想劫持计时器。一位同事告诉我IDT(中断描述符表)上的中断0x08是计时器。关于诅咒,我检查了一下,发现了两个可能的答案:说8是真正的时钟计时器,说它是双重错误,我决定相信他,不再浪费时间进一步检查。在最终控制IDT并替换中断8之后,什么也没有发生C 触发0x08中断的是什么?,c,timer,linux-kernel,x86-64,C,Timer,Linux Kernel,X86 64,我想劫持计时器。一位同事告诉我IDT(中断描述符表)上的中断0x08是计时器。关于诅咒,我检查了一下,发现了两个可能的答案:说8是真正的时钟计时器,说它是双重错误,我决定相信他,不再浪费时间进一步检查。在最终控制IDT并替换中断8之后,什么也没有发生 那么到底发生了什么 随着时间的推移,该中断是否从计时器更改为双重故障 此中断在ARM/Intel/etc上有不同的用途吗 我的代码是一个内核模块,它劫持中断8并在每次中断到达时执行printk命令。我运行了大约25分钟,在dmesg中没有输出
- 那么到底发生了什么
- 随着时间的推移,该中断是否从计时器更改为双重故障
- 此中断在ARM/Intel/etc上有不同的用途吗
printk
命令。我运行了大约25分钟,在dmesg
中没有输出
如果有必要的话:我在虚拟机上运行内核为3.8的LinuxMint。主机具有Intel i5。您可以使用以下命令找到哪个中断用于定时器: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 您已经找到了同一IRQ的两个描述,因为在保护模式下,地址范围0x0-0x1F保留供内部cpu中断使用 您必须将IRQ重新映射到另一个地址空间而不发生冲突,在本文中,您可以找到它所需的所有源代码:
内核不是已经在使用它来进行进程调度了吗?可能-我现在预计内核会崩溃,然后从我的函数调用原始函数(代理原始处理程序)。但是现在似乎什么也没发生。@roe:在大多数现代内核上,都是使用了。更灵活、更精确,而且是每个CPU,而不是全局的。@Wuff,看,这就是我做内核调度工作的时间…:)我很好;)