Ollydbg之断点设置
目錄
- 預備知識
- 1.斷點
- 2.INT3斷點
- 3.內存斷點
- 4.硬件斷點
- 實驗目的
- 實驗環境
- 實驗內容和步驟
- 1.熟練使用OD設置INT3斷點
- 2.了解使用OD設置內存斷點
- 3.了解使用OD設置硬件斷點
預備知識
1.斷點
斷點,是調試器的核心功能之一,可以讓程序中斷在需要的地方,從而方便調試器對程序進行跟蹤與分析。調試器對斷點有記憶功能,可以在一次調試中設置斷點,下一次可以讓程序自動運行到上一次設置斷點的位置中斷下來。
調試器的斷點功能是為了方便程序員調試程序,以檢測程序的邏輯完整性和功能完整性。比如在幾百行的程序源代碼中,編譯運行的過程中出錯了,如何快速定位到源代碼中的錯誤代碼,此時可以通過程序員手工查找;但是在實際的工程項目中,源代碼動不動就是成千上萬行的,這時如果出錯,手工定位錯誤代碼就太耗時耗力了,因此需要借助調試器來定位錯誤代碼。
常用的斷點包括:INT3斷點、條件斷點、消息斷點、內存斷點、硬件斷點等。
2.INT3斷點
這是在OD中最常用的斷點類型,通過快捷鍵F2即可在相應代碼處設置INT3型斷點。INT3斷點將代碼的第一個字節,用一個特殊命令INT3(調試器陷阱標志,十六進制表示為0xCC)來替代。可以在反匯編窗口中選中要設斷點的指令行并通過快捷鍵F2就可以設定一個此類型的斷點。也可以在快捷菜單中設置其他快捷鍵。當再次按下F2鍵時,斷點將被刪除。注意,程序將在設斷指令被執行之前中斷下來。
INT3斷點的設置數量是沒有限制的。當關閉被調試程序或者調試器的時候,OD將自動把這些斷點保存到硬盤中,最好不要在數據段或者指令的中間設置這種斷點,如果在代碼段以外設置斷點,OD將會給出一個警告。可以在安全選項[Security options]中永遠關閉這個提示,在某些情況下調試器會插入自帶的臨時INT3斷點。
3.內存斷點
OD每一時刻只允許有一個內存斷點。可以在反匯編窗口、CPU窗口、數據窗口中選擇一部分內存,然后使用快捷菜單設置內存斷點。如果有以前的內存斷點,將被自動刪除??梢杂袃蓚€選擇:在內存訪問(讀,寫,執行)時中斷,或內存寫入時中斷。設置此類斷點時,OD將會改變所選部分的內存塊的屬性。在與80x86兼容的處理器上將會有4096字節的內存被分配并保護起來。即使僅僅選擇了一個字節,OD也會將整個內存塊都保護起來。這將會引起大量的錯誤警告,請小心使用此類斷點。某些系統函數(特別是在Windows95/98下)在訪問受保護的內存時不但不會產生調試事件反而會造成被調試程序的崩潰。
4.硬件斷點
(僅在Windows ME,NT或2000下可用)在80x86兼容的處理器上,OD允許設置4個硬件斷點。和內存斷點不同,硬件斷點并不會降低執行速度,但是最多只能覆蓋四個字節。在單步執行或者跟蹤代碼時,OD能夠使用硬斷點代替INT3斷點。
實驗目的
1)了解調試器中的斷點及其作用;
2)熟練使用OD設置INT3斷點;
3)了解使用OD設置內存斷點;
4)了解使用OD設置硬件斷點。
實驗環境
一臺Windows 7系統電腦;實驗工具Ollydbg1.10漢化版、2.01原版。
實驗內容和步驟
1.熟練使用OD設置INT3斷點
用OD打開CLINE95.EXE并運行至程序入口點。然后Shift+F9運行CLINE95.EXE。
在上一節實驗中,學習了怎么用OD查找參考字符串和Windows API函數。現在繼續學習查找字符串。使用OD查找CLINE95.EXE程序注冊時彈出來的錯誤提示信息字符串“sorry”,并定位到CPU窗口當中的反匯編代碼。
現在做兩個對比實驗。
第一個實驗,用OD載入CLINE95.EXE,不設置斷點,在CLINE95.EXE程序主界面單擊[REGISTER]按鈕進行注冊,隨便輸入注冊碼,完成之后點擊[OK],彈出錯誤消息對話框。
第二個實驗,用OD重新載入CLINE95.EXE,并運行至程序入口點。這一次使用OD設置INT3斷點來攔截錯誤消息框的彈出。利用OD進行字符串查找并定位到錯誤消息“sorry……”的代碼處,在CPU窗口中的錯誤消息字符串一行單擊快捷鍵F2設置INT3斷點,也可以通過雙擊CPU窗口中相應代碼行的HEX數據處來設置INT3斷點。
設置好INT3斷點后,用OD快捷鍵SHIFT+F9運行CLINE95.EXE,此時在CLINE95.EXE主界面處單擊[REGISTER]按鈕進行注冊,隨便填寫完注冊碼之后單擊[OK]。發現CLINE95.EXE程序主界面已經無響應,OD已經運行至斷點處。
通過單擊OD快捷鍵F8(單步步過),運行至調用MessageBoxA API的代碼處。觀察調用MessageBoxAAPI來彈出錯誤消息框的過程中,寄存器窗口和堆棧窗口的數據變化!
可以看到,調用MessageBoxA API時,操作系統將參數順序壓入棧中。低地址為棧頂,高地址為棧底。
單擊F8調用MessageBoxA API,觀察堆棧的數據變化以及錯誤消息框的彈出。
單擊錯誤消息框的[確定]按鈕,回到OD CPU窗口,發現MessageBoxA API函數調用完成。重復注冊的步驟,以深入體會設置INT3斷點在調試程序中的作用。并學會閱讀斷點之前的代碼運行邏輯。
2.了解使用OD設置內存斷點
繼續第二個實驗。這一次用OD設置內存斷點來攔截MessageBoxA API。注意,OD會自動記錄設置的斷點,如果上一次實驗的INT3斷點還存在,請通過查看斷點窗口,單擊Del鍵(或者右鍵單擊[刪除])去除所有INT3斷點。(另外一個方法是在OD主目錄的UDD目錄下刪除相應調試程序的.udd文件,.udd文件是OD記錄調試程序時的調試記錄文件)
用OD載入CLINE95.EXE并運行至入口點,使用OD快捷鍵Shift+F9運行程序。然后查找錯誤消息字符串“sorry……”,并在數據窗口中跟隨此字符串(在CPU窗口相應代碼行的反匯編列處右鍵單擊[數據窗口中跟隨]–[立即數])。
在數據窗口中跟隨相應字符串,并選中相應字符串右鍵單擊[斷點]-[內存訪問],設置好內存斷點后,數據窗口中的相應字符串應該標記為紅色,但是由于漢化版OD的原因,未能用紅色標記出,不過不影響斷點功能。
下圖是英文原版OD內存斷點設置成功時的效果,會在數據段相應數據用紅色標記出來。
設置好內存斷點后,可以在CLINE95.EXE主界面中單擊[REGISTER]按鈕進行注冊,隨便輸入注冊碼后點擊[OK]。此時發現OD已經運行至內存斷點,OD左下角的信息提示窗口顯示“當讀取內存地址中的數據時,設置了內存斷點”,查看OD CPU窗口中的運行代碼,可以看到匯編代碼MOV CL, BYTE PTR DS:[EAX],這就是訪問內存并拷貝內存中的數據。
不斷單擊F9運行,可以看到數據窗口中的錯誤消息字符串是如何一個字符一個字符被送入CL寄存器并進行處理的。最終彈出了錯誤消息對話框。
OD每一時刻只允許有一個內存斷點,而且內存斷點的執行速度非常慢。所以通常情況下設置INT3斷點較為方便,INT3斷點的設置個數不受限制。
3.了解使用OD設置硬件斷點
這一次用OD設置硬件斷點來攔截MessageBoxA API。注意,OD會自動記錄設置的斷點,如果上一次實驗的INT3斷點還存在,請通過查看斷點窗口(Alt+B),在相應的斷點處單擊Del鍵(或者右鍵單擊[刪除])去除所有INT3斷點,并在數據窗口中相應字符串位置右鍵單擊[斷點]–[刪除內存斷點]來清除內存斷點。(另外一個方法是在OD主目錄的UDD目錄下刪除相應調試程序的.udd文件,.udd文件是OD記錄調試程序時的調試記錄文件)
用OD載入CLINE95.EXE并運行至入口點,使用OD快捷鍵Shift+F9運行程序。然后查找錯誤消息字符串“sorry……”,并在CPU窗口中相應消息字符串代碼處右鍵單擊[斷點]–[硬件執行],設置好之后可以通過[刪除硬件斷點]來刪除相應硬件斷點。
英文原版OD在設置好硬件斷點之后,在相應代碼處會用紅色標記出硬件斷點。漢化版OD未能用紅色標記出,不過不影響斷點功能。
設置好硬件斷點后,可以在CLINE95.EXE主界面中單擊[REGISTER]按鈕進行注冊,隨便輸入注冊碼后點擊[OK]。此時發現OD已經運行至硬件斷點,可以看到OD左下角的信息提示窗口提示“硬件斷點1位于……”。F9繼續運行程序,最終彈出了錯誤消息對話框。
OD允許設置4個硬件斷點。和內存斷點不同,硬件斷點并不會降低執行速度,但是最多只能覆蓋四個字節。
總結
以上是生活随笔為你收集整理的Ollydbg之断点设置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 设置键盘按钮事件,And
- 下一篇: 计算机找不到 bitlocker,win