硬體斷點原理

2021-09-08 15:04:01 字數 1460 閱讀 1094

這些就是除錯暫存器組,dr0 ~ dr7。dr0,dr1,dr2,dr3是用於設定硬體斷點的,由於只有4個硬體斷點暫存器,所以同時最多只能設定4個硬體斷點。產生的異常是status_single_step(單步異常)。dr4,dr5是系統保留的。dr7是一些控制位,用於控制斷點的方式,dr6是用於顯示哪個硬體除錯暫存器引發的斷點,如果是dr0 ~ dr3的話,相應位會被置1。即如果是dr0引發的斷點,則dr6的第0位被置1,如果是dr1引發的斷點,則dr6的第1位被置1,依次類推。因為硬體斷點同時只會觸發乙個,所以dr6的低4位最多只有一位被置1,所以在進入單步後,我們可以通過檢測dr6的低4位是否有1的位,就可以判斷該單步是否是因為硬體斷點被斷下的。如果是硬體斷點被斷下的,進而可以通過dr6的哪一位為1來判斷是由dr0~dr3中的哪個斷點斷下的。

除錯控制暫存器dr7比較重要,其32位結構如下:

位0 l0和位1 g0:用於控制dr0是全域性斷點還是區域性斷點,如果g0為1則是全域性斷點,如果l0為1則為區域性斷點。g0,l0 ~g3,l3分別用於控制dr1~dr3。

le和ge:p6 family和之後的ia32處理器都不支援這兩位。當設定時,使得處理器會檢測觸發資料斷點的精確的指令。當其中乙個被設定的時候,處理器會放慢執行速度,這樣當命令執行的時候可以通知這些資料斷點。建議在設定資料斷點時需要設定其中乙個。切換任務時le會被清除而ge不會被清除。為了相容性,intel建議使用精確斷點時把le和ge都設定為1。 

len0到len3:指定除錯位址暫存器dr0到dr3對應斷點所下斷的長度。如果r/wx位為0(表示執行斷點),則lenx位也必須為0(表示1位元組),否則會產生不確定的行為。len0到len3其可能的取值如下:

(1)00 1位元組

(2)01 2位元組

(3)10 保留

(4)11 4位元組

r/w0到r/w3:指定各個斷點的觸發條件。它們對應於dr0到dr3中的位址以及dr6中的4個斷點條件標誌。可能的取值如下:

(1) 00 只執行

(2) 01 寫入資料斷點

(3) 10 i/o埠斷點(只用於pentium+,需設定cr4的de位,de是cr4的第3位 )

(4) 11 讀或寫資料斷點

gd位:用於保護drx,如果gd位為1,則對drx的任何訪問都會導致進入1號除錯陷阱(int 1)。即idt的對應入口,這樣可以保證偵錯程式在必要的時候完全控制drx。

此時dr0為4271b5,表示4271b5位址處被設定了硬體斷點。現在我們來看看context結構。

硬體斷點和軟體斷點

硬體斷點和軟體斷點 在嵌入式開發 經常用到 jtag 器。jtag 器可以滿足嵌入式程式除錯的基本要求 斷點設定 單步除錯 記憶體編輯 變數 暫存器觀測等。而斷點設定是 jtag 器最基本的除錯功能。使用者需要系統在設定斷點處停下來後再進行除錯。斷點根據原理和用途不同又分為幾個不同的種類。斷點可分為...

記憶體斷點和硬體斷點

32位邏輯位址 16位段選擇器 偏移位址 16位段選擇器 13位全域性描述符表 區域性描述符表索引 1位gdt ldtflag 2位的訪問控制許可權 由16位得到段選擇器索引到全域性描述符表得到64位的段描述符,段描述符中包含了線性段基址 線性段基址 偏移位址 邏輯位址後半段 得到線性位址空間的乙個...

學習 硬體斷點

硬體斷點 指由硬體提供給我們的除錯暫存器組,我們可以對這些硬體暫存器設定相應的值,然後讓硬體幫我們斷在需要下斷點的位址。硬體斷點是cpu提供的功能,所以要怎麼做就得聽cpu的硬體暫存器的了。硬體斷點的實現 載入od,找到一處位址的反彙編指令如下,這條指令是把0x4003值賦給0x402064位址中的...