免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2955 | 回复: 5
打印 上一主题 下一主题

!!求助关于捕获进程读取内存的方法!! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-26 12:05 |只看该作者 |倒序浏览
我的想法是想要建一个进程,然后当这个进程读写内存页的时候就触发错误,这样来捕获内存读。


后来我在内核中页面异常的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来判断。那么请问一下我有没有办法事先设定好一个我以后建立进程的属性来判断???

不知道有没有说清楚我的问题,大家帮我想想把,还有就是大家看看我想截获我的进程读写内存的这样的
方法对不对,如果不合理的话,大家有什么好点的方法帮我截获进程读写内存??

不胜感激!!

论坛徽章:
0
2 [报告]
发表于 2007-07-26 19:44 |只看该作者
不知道这么做有何意义?

代码的执行也是读内存,栈操作也是读写内存,你这样搞,很难

论坛徽章:
0
3 [报告]
发表于 2007-07-27 09:50 |只看该作者

回复 #2 qtdszws 的帖子

我知道很多人都这么说的。

其实我想了这么做应该会很难,我想要在读写内存的时候和别的进程做一个同步,所以需要知道在什么时候进程读内存,所以也是没有办法的。

论坛徽章:
0
4 [报告]
发表于 2007-07-27 10:02 |只看该作者
>> 我想要在读写内存的时候和别的进程做一个同步
早说啊,用信号量,看UNPv2

论坛徽章:
0
5 [报告]
发表于 2007-07-27 15:48 |只看该作者

回复 #4 leviathan.alan 的帖子

有没有关于这方面的资料亚,搜了一下没什么实质性东东

论坛徽章:
0
6 [报告]
发表于 2007-07-27 16:00 |只看该作者
原帖由 wangxuhao1984 于 2007-7-27 15:48 发表
有没有关于这方面的资料亚,搜了一下没什么实质性东东



<UNIX网络编程>第二卷.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP