2010-03-05 62 views
0

如果內存訪問生成頁面錯誤,在Windows/Linux或任何其他操作系統中是否可以在指令級識別?我想象大約看起來像這樣的代碼:在Windows/Linux平臺上監視內存頁面

Buffer *buffer = new Buffer(); 

    ...Do something with the buffer...    
    if(thisProcess.generatedPageFault) { 
     ...Do something... 
    } 

    ...Do something else with the buffer...    
    if(thisProcess.generatedPageFault) { 
     ...Do something... 
    } 

回答

0

因此英特爾documentation爲x86處理器 - 一個頁面故障中斷14在低級別的內核將有一箇中斷處理程序中設置來捕捉該頁面錯誤。發生這種情況時,內核的中斷處理程序會相應地處理這種情況。

現在,由於這是在螺母和螺栓級別,並居住在0號環形碼,我不認爲你可以實際監控...你可以通過創建一個驅動程序來簡單地觀察頁面故障(同樣,依賴於內核佔用的操作系統權限和內部數據結構),並將信息傳回用戶地空間......我懷疑這是否容易暴露...

希望這幫助, 最好的問候, 湯姆。

+0

嘿。感謝您的信息。是的,我完全同意你需要一箇中斷服務程序,並且必須將它掛接到適當的中斷號。但是,在操作系統上可以做到這一點嗎?你提出編寫驅動程序的建議是非常合理的,但是你能否指點我一些能夠幫助我做到的資源? – 2010-03-05 22:19:38

1

對於linux最接近的東西是讀/ proc/self/stat並解析出 沒有。頁面錯誤之前,你的來電之後 - 在這裏描述的格式:http://linux.die.net/man/5/proc

請記住,讀/解析該文件本身可能導致頁面錯誤 - 至少應1.時間,你這樣做,如果你分配內存的讀它(如致電fopen

+0

嘿。關於第二個問題的偉大觀點。你知道一個智能的方法來防止閱讀/解析文件的頁面錯誤被排除嗎? – 2010-03-08 00:57:18

+0

如果你只是使用一個靜態緩衝區來讀入,並使用open/read(而不是fopen/fread),你應該相當確定除了可能的1以外不應該有任何頁面錯誤。 – nos 2010-03-08 08:18:38