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