Patch Intel int 3斷點指令的功能

2022-03-01 19:37:16 字數 2422 閱讀 6639

今天在除錯乙個程式時候遇到乙個問題,我下了很多的軟體斷點就是int 3,這當中有的被enable,有的被disable,因為斷點太多了,我不想乙個個手動把enable的斷點,設定成disable,然後在需要的時候,還要再還原回去太麻煩了,我想有沒有什麼快捷的手段呢,一下禁用所有的int 3斷點,而不要去改windbg裡面的斷點列表?

我想到了乙個方法。

int 3 指令是乙個單位元組的指令就是0xcc,當cpu執行到這條指令之後相對應的中斷例程,在windows中就是kitrap03。在這個例程中會去呼叫commondispatchexception,這個函式去做分發並最終通知到偵錯程式。我的做法很簡單就是直接patch這個中斷例程的處理函式讓它直接返回就可以了!

我在windbg裡面我執行如下命令:

kd> !idt -a

dumping idt:

00:    804df50e nt!kitrap00

01:    804df68d nt!kitrap01

02:    task selector = 0x0058

03:    804dfaa1 nt!kitrap03  ;---> int 3的中斷處理例程

04:    804dfc24 nt!kitrap04

05:    804dfd89 nt!kitrap05

06:    804dff0a nt!kitrap06

07:    804e0583 nt!kitrap07

08:    task selector = 0x0050

09:    804e0988 nt!kitrap09

0a:    804e0aa6 nt!kitrap0a

0b:    804e0be3 nt!kitrap0b

0c:    804e0e40 nt!kitrap0c

----------------------------------

kd> u 804dfaa1

nt!kitrap03:

804dfaa1 6a00            push    0

804dfaa3 66c74424020000  mov     word ptr [esp+2],0

804dfaaa 55              push    ebp

804dfaab 53              push    ebx

804dfaac 56              push    esi

----------------------------------

kd> eb 804dfaa1 cf

kd> u 804dfaa1

nt!kitrap03:

804dfaa1 cf              iretd    ;呵呵,我在這兒直接返回了相當於沒有斷點功能了

804dfaa2 0066c7          add     byte ptr [esi-39h],ah

804dfaa5 44              inc     esp

804dfaa6 2402            and     al,2

804dfaa8 0000            add     byte ptr [eax],al

804dfaaa 55              push    ebp

----------------------------------

現在應該是沒有軟體斷點的功能了,偵錯程式不會收任何int 3發出的除錯事件了。但是事實上是不是真的這樣呢?

因此,我寫了乙個實驗的程式如下:

這個程式如果正常的情況下中斷到偵錯程式,如果沒有除錯就crash了。但是如果int 3的中斷處理的例程被乾掉了,就是順利的執行下來。

上圖中可以看到int 3斷點沒有起作用。

不過,這樣一來原先下斷點的地方得不到恢復,這種方法不行啊!

對於複雜的斷點列表只能手工匯出,再匯入了,這個方法有點拙!

不過,這樣一搞倒是有反除錯的效果了!

ring3層的偵錯程式就下了軟體斷點反而會crash,ring3層的除錯會被干擾。

嚴格的說這種方法是反下軟體斷點,而且效果還不錯!

真是無心插柳柳真蔭啊!!!

裝置樹使用 3 中斷

中斷說明符是乙個或多個資料單元 由 interrupt cells指定 用於指定裝置所連線的中斷輸入。大多數器件只有乙個中斷輸出,如下例所示,可以在器件上有多個中斷輸出。中斷說明符的含義完全取決於中斷控制器裝置的繫結。每個中斷控制器可以決定唯一定義中斷輸入所需的單元數。以下 為我們coyote s ...

S3c2440中斷學習

中斷功能在微控制器上一直在用,今天學習在2440上用外部中斷的方式,實現按鍵檢測功能。1.中斷生命週期 中斷源,中斷過濾,中斷處理 1.1 中斷源 2440有60個中斷源。1.2 中斷過濾 有兩個關卡,submask和mask,中斷方式有mode控制。1.3 中斷處理 非向量方式 2440 向量方式...

生活品質 斷捨離Day3

說明 這是乙個 斷捨離 的踐行特訓營 我們需要幾天的時間 讓自己變得更加簡單,也更加幸福 我們一日三清理,清理的 不僅是灰塵,還有心情 每一天都有新的挑戰,新的作業。day3挑戰 感受分享 以前的圖都不敢上啊,因為實在是太亂了。今天 讓自己的桌子 變得簡單 整潔 整潔 從現在開始,不再是計畫中,而是...