1. 程式人生 > >斷點 相關技術與原理(2)

斷點 相關技術與原理(2)

def pan 保存 ollydbg php class 工具 code http

繼續對OD的斷點技術做個筆記。


1、硬件斷點:

Intel CPU中有8個調試寄存器(Debug Register)DR0 — DR7,當中DR0 — DR3用於設置硬件斷點地址,DR6保存狀態,DR7負責控制。當指令運行到DR所指地址時,CPU中斷,等待OllyDbg進一步操作。
OllyDbg中,選定一行後按F4鍵。用於運行到指定位置,就是暫時設置了一個硬件斷點。
硬件訪問/寫入斷點是斷在觸發硬件斷點的下一條指令處。

方法:

在代碼處右鍵->斷點->硬件運行。在寄存器窗體右鍵->查看調試寄存器,能夠看到設置成功。
在菜單->調試->硬件斷點處。能夠看到已經設置的全部硬件斷點。


技術分享

長處:
程序無法檢測此類斷點。
缺點:
最多僅僅能同一時候設置四個。


2、條件斷點\條件記錄斷點
2.1條件斷點

實際上就是普通的CC斷點,僅僅只是該斷點的觸發須要滿足設置的條件。


OD的幫助文檔中有具體的條件表達式規範。
技術分享

技術分享
技術分享

2.2條件記錄斷點
比條件斷點能夠有更具體的條件設定。

工具欄中【L】button打開日誌窗體。

技術分享

3、消息斷點
Windows是消息驅動型的系統。消息斷點使得某個窗體函數接收到某個消息時產生中斷。

方法:點擊工具欄中的【w】,假設為空。則右鍵刷新。
選擇一個窗體對象,右鍵->設置消息斷點。
在消息(Message)中設置相應的消息代碼,如202 WM_LBUTTONUP等。


設置消息斷點通常會停在系統庫函數領空,僅僅須要在工具欄【M】的內存區段的代碼段(如CODE)設置斷點就能夠。

(如內存訪問斷點)


A、對於堆棧,想要查看比如[esp+8]的地址的位置。僅僅需雙擊地址就可以。
技術分享

B、想要查看全部的消息,以查找實用的信息,在信息轉換的函數上下消息斷點就可以。


如定義(DefWindowProcA)與轉換消息(TranslateMessage)的函數上設置斷點。



技術分享

技術分享

參考文章:

http://bbs.pediy.com/showthread.php?p=1279874#post1279874

http://bbs.pediy.com/showthread.php?p=1280177#post1280177


斷點 相關技術與原理(2)