[心得] 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