OD使用教程 调试篇
認識OD的兩種斷點
?
OllyDBG從原理上來區分,有兩種不同的斷點:軟件斷點和硬件斷點。
也許會有朋友說那不是還有內存斷點嗎?
內存斷點嚴格來說是屬于一種特殊的軟件斷點。
?
內存斷點:
內存斷點每次只能設置一個,假如你設置了另一個內存斷點,則上一個會被自動刪除。
設置一個內存斷點,會改變整塊(4KB)內存的屬性,哪怕你只設置一個字節的內存斷點。
另外還需要提一下的是,內存斷點會明顯降低OD的性能,因為OD經常會校對內存。
?
軟件斷點:
當我們按下F2設置的斷點就是軟件斷點。
設置該斷點的原理是在斷點處重寫代碼,插入一個int3中斷指令,當CPU執行到int3指令的時候,OD就可以獲得控制權。
?
硬件斷點:
這個原理跟軟件斷點不同,硬件斷點的可行性依賴于CPU的物理支持。
傳說中,有這么一些寄存器,它們只用于調試,我們稱為調試寄存器:Dr0~Dr7
其中Dr0~Dr3四個寄存器用來存放中斷地址,Dr4、Dr5保留不使用,Dr6、Dr7用來記錄Dr0~Dr3的屬性(如讀,寫還是執行,單位是字節,字還是雙字)。
因此,這就解釋了為啥硬件斷點只有四個,天生不足哈。
?
那么聰明的魚油肯定會追問:小甲魚老濕,那我要如何來區分何時使用何種斷點呢?
這兩種斷點在使用上都有它們自身的限制,只要搞清楚它們各自的特性就知道何時該用哪個了。
例如軟件斷點就只能在OD的CPU界面下,在數據段它下不了,在一條指令的中間它也下不了。
在我們這個例子中,斷點我們想下在windows的動態鏈接庫里,我們需要用到硬件斷點,因為用軟件斷點下在dll文件中是不會保存的,重啟程序后將丟失斷點。
?
接下來的一系列實踐會讓你掌握這些技巧的!
總結
以上是生活随笔為你收集整理的OD使用教程 调试篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么要使用EJB?
- 下一篇: UML建模之数据建模