- 论坛徽章:
- 0
|
我的想法是想要建一个进程,然后当这个进程读写内存页的时候就触发错误,这样来捕获内存读。
后来我在内核中页面异常的do_anonymous_page( )函数处加了一个判断语句:如果是我想要触发错误的
进程建立,肯定一开始会缺页异常,这时候给它分配内存页面的时候我把它分配的内存页面设成不可读
写的,这样当以后此进程执行的时候就会触发错误。
我按着我的思路这样做了,但是pte的页属性中没有不可读写的,只有一个是PAGE_USER,也就是设置成
系统级或是用户级。我想如果设置成系统级的页面,这样读写就都会发生页保护的。在include/asm-i386/
pgtable.h中有一两个函数
static inline pte_t pte_rdprotect(pte_t pte) { (pte).pte_low &= ~_PAGE_USER; return pte; }
static inline pte_t pte_exprotect(pte_t pte) { (pte).pte_low &= ~_PAGE_USER; return pte; }
都是将页面设置成系统级的,我不太清楚这两个函数有什么区别,不知道那位弟兄给我解释一下,谢谢!
还有就是上面说过的,我想在do_anonymous_page( )函数处加了一个判断语句来判断是不是我想要触发
错误的进程,大致是在函数一开始加了句:
if (???????)
entry = pte_rdprotect(mk_pte(ZERO_PAGE(addr),vma->vm_page_prot));
就是想建立一个全0的系统级的页面给我的进程。这里有一个问题是我在判断的时候怎么来判断出是我想要
的进程呢。注意:这里显然不能用pid来判断,因为我的进程是后来才建立的,pid是随机的,我在内核中
此处无法用pid来判断。那么请问一下我有没有办法事先设定好一个我以后建立进程的属性来判断???
不知道有没有说清楚我的问题,大家帮我想想把,还有就是大家看看我想截获我的进程读写内存的这样的
方法对不对,如果不合理的话,大家有什么好点的方法帮我截获进程读写内存??
不胜感激!! |
|