[心得] Read only 與 Write 之外的選擇

作者: BitTorrent (螳勃唬)   2014-01-07 23:17:47
之前發的文 好像被砍掉了...現在來自回
因為學習Kernel路上有遇到些問題,
目前想個法子解決了@@
想做的是 memory某段address中 要偵測這address是否被修改
感謝有大大提供各種不同的方法。
這邊來說我想的方法是比較被動的方式。
想法:
把某段memory位置 設定成Read Only 讓他進Page fault handler
然後再到Page fault handler 看看memory的值被改成多少?
譬如原本是 a = 5; 設定 &a是Read Only
當modify 的時候會進Page fault handler
但我希望 1 < a < 10
Page fault handler 會檢查 a被改成甚麼值 若是 a = 6;
那ok,return回去;若a = 11; 則Page fault。
感謝各位大大賜教~
作者: mayasky ( )   2014-01-08 01:52:00
你有看過那篇被刪除的訊息嗎?我沒刪,詢問另位版主中
作者: yvb   2014-01-08 02:10:00
page fault時, a應該尚未被修改,也尚無法被修改,所以如何檢查?如果就這麼return回去,仍會執行同指令,結果再度page fault吧.
作者: sivle (KC)   2014-01-08 11:38:00
我也沒刪。。。大家分享心得的 我不會刪掉才是
作者: yvb   2014-01-08 12:34:00
真奇怪, 有文章被系統暗黑掉了... @.@判斷page fault後續狀況的問題, 我以為會相當複雜, 而且會是machine dependant; 最主要是要分析 ip 指向的指令做什麼...比方 x86 的 mov 指令, 多種定址法的指令長度都不盡相同...不知原PO是實作在什麼平台上, 有什麼kernel函式協助分析指令,或是我想太多, 其實光就 pt_regs 就足以判斷?還有一些問題: (1) 造成 page fault 的是 userspace process還是 kernel thread? (2) handler改值前後, 需要切換 RO 嗎?(3) 除了 mov, 其它如 add, xchg 等又是如何?關於 x86 指令集分析的處理, 不知原PO是自行包辦,或是如何叫用 kernel 哪些函式來協助完成?問題 (1) 應改為 造成 page fault 的是 kernel thread,process 的 user space 或 kernel space ?此外還有更複雜的情況, 比方 a 為 int, 那麼*(((char *)&a)+2)=1 或是 *(int *)(((char *)&a)-2)=-1 之類.當然, 如果一堆變數 b, c, ... 都和 a 同 page 時, 那效能...

Links booklink

Contact Us: admin [ a t ] ucptt.com