Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 触发0x08中断的是什么?_C_Timer_Linux Kernel_X86 64 - Fatal编程技术网

C 触发0x08中断的是什么?

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中没有输出

我想劫持计时器。一位同事告诉我IDT(中断描述符表)上的中断0x08是计时器。关于诅咒,我检查了一下,发现了两个可能的答案:说8是真正的时钟计时器,说它是双重错误,我决定相信他,不再浪费时间进一步检查。在最终控制IDT并替换中断8之后,什么也没有发生

  • 那么到底发生了什么
  • 随着时间的推移,该中断是否从计时器更改为双重故障
  • 此中断在ARM/Intel/etc上有不同的用途吗
我的代码是一个内核模块,它劫持中断8并在每次中断到达时执行
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,看,这就是我做内核调度工作的时间…:)我很好;)