3.OD-功能小结
1.在反匯編面板窗口,Hex dump列:設置或取消無條件斷點,對應快捷鍵是F2鍵
2.Comment:增加或編輯注釋,對應的快捷鍵是;鍵,在反匯編面板窗口按下會出現如下圖:
3.OD有界面選項(Appearance)和調試選項(Debugging options)等,這些選項配置都保存在ollydbg.ini文件中.
4.UDD用來保存當前調試的一些狀態,如斷點,注釋,以便下次調試時繼續使用.
5.od可以通過兩種方式加載目標程序調試,一種是通過createprocess創建進程 另一種是利用DebugActiveProcess函數將調試器捆綁在一個正在進行的進程上.
6.F7單步調試,遇到CALL/LOOP跟進,F8不會跟進,
? CTRL+F9直到出現RET指定時中斷
? ALT+F9若進入系統領空,此命令可瞬間回到應用程序領空
? F9運行程序.
7.CTRL+F9遇到RET指令是暫停還是步過,可以在選項里設置,方法是:選項-調試設置-調試-執行到RET后,單步步過RET
如下圖:
?
8.斷點分類:
(1).INT3斷點:下此斷點時,地址處的內容被調試器用INT3指令(機器碼是CCh)替換,當然,如果自己寫調試器,也可用其他一些指令來代替INT3來觸發異常
INT3斷點好處是可以設置無數個斷點,缺點是改變了原程序的指令,容易被軟件檢測到,例如為了防范API被下斷,一些軟件會檢測API的首地址是否為CCh,
(2).硬件斷點和DRx調試寄存器有關,原理是使用4個調試寄存器(DR0,DR1,DR2,DR3)來設定地址,以及DR7設定狀態,因此最多只能設置4個斷點
設定方法是在指定的代碼行單擊鼠標右鍵,執行
?
刪除硬件斷點有些麻煩,單擊菜單Debug/Hardware breakpoints(調試/硬件斷點):
?
F4可以執行到光標所在的行,也是利用調試寄存器原理,中斷后自動刪除,相當于一次性硬件斷點.
硬件斷點的好處是速度快,在INT3斷點容易被發現的地方,使用硬件斷點代替會有很好的效果,缺點是最多使用四個斷點.
(3).OllyDbg可以設置內存訪問斷點或內存寫入斷點,原理是對所設的地址設為不可訪問/不可寫屬必,這樣當訪問/寫入時就會產生異常,OD截獲異常后比較異常地址是不是斷點地址,如果是就中斷,讓用戶繼續進行操作.
內存斷點的設置和刪除都是在鼠標右鍵菜單中:我們在前面設置硬件斷點的菜單中就能看到。
和F4設置一次性硬件斷點一樣,內存斷點同樣存一次性斷點,
Alt+M顯示內存,可以看到很多段,每個段都有不可訪問\讀\寫\執行屬性,在相應段上單擊右鍵,會發現一個命令Set break-on-access(在訪問上設置斷點),其快捷捷是F2鍵,這個斷點是一次性斷點,當所在段被讀取或執行時就中斷,注意不是Set memory breakpoint? on access(它不是一次性斷點):
?
9.如想要快速回到當前CPU所在的指令上,可以雙擊寄存器面板上的EIP即可
?10.如想修改EIP,把光標移到所需要的地址上,然后執行右鍵菜單"New origin here"(此處新建EIP),其他寄存器雙擊就可以修改
11.比如call 401496,401496對應amsg_exit函數,?光標停在401496,Shift+;鍵,出來一個標簽框,輸入字符"amsg_exit",所有調用401496的call都變成call<amsg_exit>形式.
12.用鼠標點擊寄存器窗口header,切換不到Debug register,只能通過鼠標右鍵.?
?
總結
- 上一篇: 2.OD-C++的虚函数表遍历
- 下一篇: 4.OD-调试示例1