硬體斷點和軟體斷點

2021-05-22 03:20:00 字數 2947 閱讀 6946

硬體斷點和軟體斷點

在嵌入式開發

,經常用到

jtag

**器。

jtag

**器可以滿足嵌入式程式除錯的基本要求:斷點設定、單步除錯、記憶體編輯、變數、暫存器觀測等。而斷點設定是

jtag

**器最基本的除錯功能。使用者需要系統在設定斷點處停下來後再進行除錯。斷點根據原理和用途不同又分為幾個不同的種類。

斷點可分為硬體斷點和軟體斷點兩大類: 1

.硬體斷點需要目標

cpu的硬體支援,當前流行的

arm7/9

內部硬體設計提供兩組暫存器用來存貯斷點資訊,所以

arm7/9

核心最多支援兩個硬體斷點,而

arm11

則可以支援到

8個硬體斷點。這與偵錯程式無關。

硬體斷點可以設定在任何位置的**上,包括

rom和

ram;而軟體斷點由於需要修改相應位址的值,所以一般只能設在

ram上,但是數量可以不受限制。由於硬體斷點設定的靈活性,所以是最優先選用的斷點資源,但是兩個斷點往往很難滿足工程師進行深入除錯的需要,於是軟體斷點可以作為硬體斷點的補充資源來使用。 2

.軟體斷點則是通過在**中設定特徵值的方式來實現的。當需要在某位址**處設定軟體斷點的時候,**器會先將此處**進行備份保護,然後將預先設定好的斷點特徵值

(一般為

0x0000

等不易與**混淆的值

)寫入此位址,覆蓋原來的**資料。當程式執行到此特徵值所在的位址時,**器識別出此處是乙個軟斷點,便會產生中斷。當取消斷點時,之前受保護的**資訊會被自動恢復。

3. 由於通常的軟體斷點只能設在

ram執行的**上,而隨著系統的**量越來越大,特別是在移動通訊領域,擴充大容量的

ram勢必會增加產品的成本,所以現在很多系統直接在

flashrom

上執行**。對於這種在

flashrom

上執行**的系統,一般的軟體斷點是無法設定的,這也是軟體斷點的侷限性。對於這樣的系統,只能通過交替使用兩個硬體斷點滿足需要,但是會帶來一定的不便。

要很好的解決這一矛盾,只有使**器增加在

flashrom

上設定軟體斷點的功能,拓展**器中可供利用的斷點資源。例如,日本橫河計算機株式會社

(ydc)

最新推出的高階

arm**器—

advicepro

,就是第乙個支援

flash

斷點的ice

**器產品。 在

flashrom

上設定軟體斷點的原理與在

ram上設定軟斷點類似,也是在設定的斷點處用特徵碼替換原有**,通過識別特徵碼使斷點事件發生。不同的是,在

flashrom

上設定軟體斷點需要對

flash

進行擦寫操作,這就需要**器能夠有

flash

程式設計功能,並且能夠在盡可能短的時間內完成特徵碼的寫入。完成這一系列的讀寫操作,就可使在

flashrom

上除錯**的工程師獲得更充裕的斷點資源,從而大大提高了開發效率。

除了

jtag**器

, gdb是除錯的另一有力**。

訊號是實現

gdb斷點功能的基礎。以

x86為例,向某個位址打入斷點,實際上就是往該位址寫入斷點指令

int 3

,即0xcc

。目標程式執行到這條指令之後就會觸發

sigtrap

訊號,gdb

捕獲到這個訊號,根據目標程式當前停止位置查詢

gdb維護的斷點鍊錶,若發現在該位址確實存在斷點,則可判定為斷點命中。

gdb的指令級單步

所謂指令級單步就是指

gdb控制目標程式只執行一條指令之後即停止。指令級單步是

next/step (c

語言原始碼級)、

nexti/stepi(

指令級)

等執行類除錯命令的基礎。指令級單步有硬體單步和軟體單步之分。所謂硬體單步是指

cpu架構本身就支援指令級單步,目標程式可以在執行一條指令之後自動停止。所謂軟體單步是指

cpu架構不支援指令級單步,需要

gdb用軟體方法來實現指令級單步。

(arm

架構的kprobe

也採用類似的方法)

支援硬體單步的架構如

x86和

ppc。對於

x86,可通過設定

eflags

暫存器中的

tf標誌來將

cpu置於單步模式。對於

ppc,則可通過設定

msr暫存器中的

se標誌來將

cpu置於單步模式。在單步模式中,

cpu每執行一條指令,就會產生乙個單步異常,通知

gdb進行處理。

不支援硬體單步的架構如

arm和

mips

。對於此類架構,

gdb採用的是用臨時的軟體斷點來模擬單步的方法。即在需執行指令的下一條指令處臨時插入乙個斷點,然後讓目標程式繼續執行,它會在執行完當前指令之後遇到下一條指令處的臨時斷點,於是目標程式停止,通知

gdb命中斷點,

gdb再將此斷點刪除,由此來完成指令級單步的過程。(插入臨時斷點需要

gdb實現**分支**的功能)

step

和next

的區別:

對於簡單語句,

step

完全等同於

next

。唯一不同的是,若單步過程中遇到函式呼叫,

step

命令將停止在子函式的起始處,而不是將其跨越(無除錯資訊的子函式除外)。

參考http://www.eet-china.com/art_8800448644_480401_ta_b5f39204.htm

硬體斷點和軟體斷點 整理

既然軟體斷點是要往某個位址寫入斷點指令的,那麼最起碼該位址應該是可寫的吧?大多數時候,我們的程式是會被載入到記憶體 ram 中執行的,ram是可讀可寫,這時候軟體斷電就是有效的 2 但是,對於某些比較重要的程式,可能會直接在flash中執行,並且flash對使用者可能是唯讀的,這時候軟體斷點就沒有用...

記憶體斷點和硬體斷點

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

OD硬體斷點,OD記憶體斷點,API斷點

一.設定硬體寫入斷點 9 i0 b m a8 8 w8 u f q q r w0 s,k9 h s.2 l w1 d8 r8 j a 0 v4 o r q at r p a l y h 在指定位址進行反 彙編 g m d q e d b,a l x x 7 l h.r d t8 k1 4 follo...