有時候在帶有簡單MMU的嵌入式系統上工作時,我曾經動態地編程此MMU以檢測內存損壞。用於檢測內存損壞的Linux C調試庫
例如,在運行時的某個時候,foo變量被一些意外的數據覆蓋(可能是懸掛指針或其他)。因此,我添加了額外的調試代碼:
- 在init處,foo使用的內存被指示爲MMU的禁止區域;
- 每次foo被故意訪問,訪問該區域之前都被禁止;
- 添加了一個MMU irq處理程序,用於轉儲主機和負責違規的地址。
這實際上是一些觀察點,但直接由代碼本身自己處理。
現在,我想重複使用相同的技巧,但在x86平臺上。問題在於,我很難理解MMU在這個平臺上的工作方式,以及它如何被Linux使用,但是我想知道是否有任何庫/工具/系統調用已經存在來處理這個問題。
請注意,我知道存在各種工具,如Valgrind或GDB來管理內存問題,但據我所知,這些工具沒有一個是由調試代碼動態重新配置的。
我主要對Linux下的用戶空間感興趣,但也歡迎任何有關內核模式或Windows下的信息!
任何在調試器中使用內存讀/寫斷點的機會?如果你知道有問題的記憶會被擊中,我就會這樣做。 – 2010-04-30 17:49:30
爲什麼有一個動態可重新配置的工具很重要?如果你可以在Valgrind下啓動你的程序,並讓它給你你的流浪寫的行號,爲什麼你不想要這個? – Karmastan 2010-04-30 19:41:37
@Karmastan:海報要求不要對未知內存或錯誤分配的內存進行雜散寫入,valgrind等人會捕獲的東西,但在錯誤的時間寫入完全有效的內存。 – 2010-04-30 20:07:40