ollydbg中的記憶體斷點和硬體斷點有什麼區別?

時間 2021-05-07 04:13:34

1樓:VeroFess

樓上幾位說的很明白了,這裡補一下具體內容…

斷點都是通過ExceptionRecord->ExceptionCode判斷

在進行記憶體斷點時,要是使用新增PAGE_GUARD的方式進行保護,會觸發STATUS_GUARD_PAGE_VIOLATION(0x80000001)的異常

而通過取消相應許可權的,則會觸發EXCEPTION_ACCESS_VIOLATION(0xC0000005)異常

但是絕對不會觸發

EXCEPTION_IN_PAGE_ERROR(0xC0000006)

而硬體斷點(包括單步和DrX)都會觸發STATUS_SINGLE_STEP(0x80000004)異常

而使用int 3進行中斷則會觸發EXCEPTION_BREAKPOINT(0x80000003)異常

這裡就是不同之處了

搞定,吃飯去

2樓:

記憶體斷點和硬體斷點是兩個不同的概念,我感覺題主是搞混了.

記憶體斷點的實現方式有兩種,一種是通過設定該記憶體位置所在的頁不可讀/寫,然後當程式中對該記憶體進行讀/寫的時候就會觸發異常,偵錯程式捕獲到這個異常後范縣這個不可讀/寫的異常是因為設定了記憶體斷點,於是就斷下來了;還有一種方式是使用硬體斷點,是的,硬體斷點可以用來實現記憶體斷點.當你把某個位址上設定了硬體讀/寫斷點後,程式對該記憶體進行讀寫時CPU會觸發乙個異常,偵錯程式捕獲該異常後發現是設定了硬體的讀寫斷點後就斷下來了.

題主如果仔細觀察OD設定記憶體斷點的選單就會發現設定記憶體斷點的選單有記憶體讀/寫斷點,還有硬體的讀/寫/執行斷點.

想要詳細了解這個可以看一下張銀奎的《軟體除錯》一書.

3樓:許羨

記憶體斷點設定記憶體屬性而觸發的。例如記憶體屬性,有可讀可寫可執行。你修改了不可讀,當程式讀那記憶體的時候,就會觸發記憶體錯誤異常,偵錯程式會捕獲此異常。

硬體斷點是設定dr暫存器而觸發的。這個是CPU層面的支援因而只能設定四個,因為只有dr0--dr3。這四個。CPU執行命令的時候,發現與dr暫存器符合的時候會觸發異常。

4樓:

記憶體斷點通過將斷點對應的記憶體頁設定為無效實現,而硬體斷點通過cpu提供的除錯暫存器實現。

實際使用過程中,記憶體的效率比較低,但可以下許多個。而硬體斷點效率高,但是只能設定有限個數(大概三個,具體查intel手冊)。

另外建議樓主去看雪查查就知道了,到知乎學不了這個。

怎樣通俗的理解作業系統中記憶體管理分頁和分段?

Bowen Xiao 感覺高讚說的有些問題,結合點我自己的想法。分段講的有點問題。照這個答案,分段解決的是虛擬記憶體解決的問題,但實際上兩者不能劃等號。應該說現代作業系統的記憶體管理,是由分段和分頁兩種技術共同奠基的。當然,也不能簡單地就說2者的粒度不同。兩者本質上都是對記憶體的劃分,我感覺分段是從...

STL中vector的動態記憶體問題

對於vs,是在棧上有一塊空間,空間裡面用了三個指向堆的指標來管理一塊堆上的記憶體,對於p,是在堆上有一塊空間,空間裡面用了三個指向堆的指標來管理一塊堆上的記憶體。比如對於vector Widget 你的一些Widget物件永遠是在堆上的,在一塊連續的記憶體中,但是管理這塊記憶體的那個物件可以在棧上,...

linux swap分割槽中的內容在記憶體壓力恢復之後會怎樣?

學神來啦 建立乙個普通的linux分割槽 主分割槽 邏輯分割槽均可 fdisk dev sdb command m for help p disk dev sdb 8589 mb,8589934592 bytes 255 heads,63 sectors track,1044 cylinders,t...