2013-12-19 32 views
3

我試圖劫持定時器中斷。一位同事告訴我IDT(中斷描述符表)上的中斷0x08是定時器。詛咒我檢查,看到兩個可能的答案:this其中說,8是real clock timerthis說這是Double Fault中斷 - 我決定相信他,而不是浪費時間進一步檢查。在最終控制了IDT並替換了中斷8之後,什麼也沒有發生。什麼是觸發0x08中斷?

  • 那麼是怎麼回事?
  • 從定時器到雙重故障,這個中斷是否隨時間改變了它的用途?
  • 這個中斷在ARM/Intel /等上有不同的用途嗎?

我的代碼是一個內核模塊,它劫持中斷8,每次中斷到來時都會執行一個printk命令。我跑了大約25分鐘 - 沒有輸出在dmesg

萬一它很重要:我在VM上運行Linux內核3.8的Linux Mint。主機有一個Intel i5。

+0

內核是否已經使用它來執行進程調度? – falstro

+0

也許 - 我期待內核崩潰,然後調用我的函數原始函數(代理原始處理程序)。但現在看來什麼都沒有發生。 –

+1

@roe:在大多數現代內核中,[APIC timer](http://wiki.osdev.org/APIC_timer)用於此目的。更加靈活和精確,而且是每個CPU而不是全局的。 – duskwuff

回答

1

你可以找到它中斷定時器使用以下命令:執行cat/proc /中斷

以下是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。