硬件斷點和軟件斷點(整理)

1. 斷點的類型

  • 軟件斷點:由非法指令異常實現,適用於運行於內存中的程序(軟件實現)。以x86爲例,向某個地址打入斷點,實際上就是往該地址寫入斷點指令INT 3,即0xCC。目標程序運行到這條指令之後就會觸發SIGTRAP信號,gdb捕獲到這個信號,根據目標程序當前停止位置查詢gdb維護的斷點鏈表,若發現在該地址確實存在斷點,則可判定爲斷點命中[1]。
  • 硬件斷點:由硬件特性實現(數量有限),適用於直接在flash中運行的程序。

2. 爲什麼要分軟件斷點和硬件斷點呢?

既然軟件斷點是要往某個地址寫入斷點指令的,那麼最起碼該地址應該是可寫的吧?大多數時候,我們的程序是會被加載到內存(RAM)中執行的,RAM是可讀可寫,這時候軟件斷電就是有效的[2]。
但是,對於某些比較重要的程序,可能會直接在flash中執行,並且flash對用戶可能是隻讀的,這時候軟件斷點就沒有用了,因爲沒辦法寫進斷點指令,此時必須依賴於硬件斷點。這就是軟件斷點和硬件斷點使用上的不同。

3. GDB中如何設置軟/硬件斷點

  • 軟件斷點:break 命令
  • 硬件斷點:hbreak命令

[1] https://blog.csdn.net/gowyz/article/details/7290701
[2] https://www.cnblogs.com/-glb/p/12514577.html
[3] https://blog.csdn.net/small_prince_/article/details/80681684

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章