一般斷點要滿足的3個要求:
1. 執行到指定位址時可掛起程式,此時能提供環境資料給使用者,並等待使用者操作或命令。
2. 當使用者希望繼續執行時,能像正常程式一樣繼續執行。
3. 當再次執行到斷點時,還能像步驟
1一樣掛起程式。
例如用int3,
sti,
cli等指令替換原機器碼,都能實現斷點效果。
od的斷點把指定位址的機器指令替換為
cc,普通單步指令停下的位址,其機器碼不是cc。
使用者設定的斷點儲存在斷點資訊表中,表中儲存位址和原機器碼。當發生異常時比較位址是否存在於表中,存在則偵錯程式接管斷點,否則交給程式處理。
ntdll.dll中有一條
int3
指令,稱為系統斷點,提示我們馬上要到
entry point
了,使用者可以做準備工作了。
int3專用於使用者和除錯服務互動,程序內發生的
int3
異常如果未處理,程式最終會崩潰,如果附加了偵錯程式,且偵錯程式的處理態度是
dbg_continue
,則此int3
指令執行完畢,繼續下一條指令。
名稱粉碎規則(編譯後檢視
obj檔案):
//_foo1 _字首
extern "c" int __cdecl foo1(int a, char b) {
return 0;
//_foo2@8 _字首
+ @所有引數位元組數
extern "c" int __stdcall foo2(int a, char b) {
return 0;
//@foo3@8 @字首
+ @所有引數位元組數
extern "c" int __fastcall foo3(int a, char b) {
return 0;
硬體斷點和軟體斷點
硬體斷點和軟體斷點 在嵌入式開發 經常用到 jtag 器。jtag 器可以滿足嵌入式程式除錯的基本要求 斷點設定 單步除錯 記憶體編輯 變數 暫存器觀測等。而斷點設定是 jtag 器最基本的除錯功能。使用者需要系統在設定斷點處停下來後再進行除錯。斷點根據原理和用途不同又分為幾個不同的種類。斷點可分為...
硬體斷點和軟體斷點 整理
既然軟體斷點是要往某個位址寫入斷點指令的,那麼最起碼該位址應該是可寫的吧?大多數時候,我們的程式是會被載入到記憶體 ram 中執行的,ram是可讀可寫,這時候軟體斷電就是有效的 2 但是,對於某些比較重要的程式,可能會直接在flash中執行,並且flash對使用者可能是唯讀的,這時候軟體斷點就沒有用...
OD筆記2 記憶體斷點與硬體斷點
精闢解釋 來自看雪論壇 記憶體訪問斷點是利用 virtualprotect 來把該記憶體位址所在的記憶體頁 大小為4096位元組 設定為不可讀 不可寫 不可執行 所以當訪問該記憶體的時候會產生乙個訪問異常 從而在異常處理函式中實現記憶體訪問斷點的操作 硬體斷點是利用 cpu自帶的除錯暫存器 dr 產...