Chinaunix首页 | 论坛 | 博客
  • 博客访问: 539700
  • 博文数量: 120
  • 博客积分: 3030
  • 博客等级: 中校
  • 技术积分: 1445
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-05 01:00
文章存档

2011年(1)

2009年(2)

2008年(32)

2007年(33)

2006年(52)

我的朋友

分类: LINUX

2007-07-25 13:26:12

在内核模式读写文件的一般方法

mm_segment_t old_fs;
orig_open=sys_call_table(__NR_open);

orig_read=sys_call_table(__NR_read);
orig_close=sys_call_table(__NR_close);
   old_fs = get_fs();
    set_fs(get_ds());
     fd=orig_open(pathname,O_RDWR,"rwx-rwx-rwx");
     orig_read(fd,buffer,size);
     orig_close(fd);
     set_fs(old_fs);

 
其中old_fs是一个地址 ,也可以定义为
unsigned long old_fs  ,这样一来好理解些
原理是这样的每个进程都有一个结构成员add.limit用来存放该进程可以访问的地址空间范围
get_fs就是获得这个东东的 ,用脚趾头也可以想到set_fs就是设置这个地址范围的
所以在内核空间访问的话首先要保存下原来的add.limit,然后将比如0xffffffff通过set_fs设置好
然后就可以进行正常的读写了open 等函数都可以用了
最后需要将add.limit写回原来的值
 
觉得这些东西满无聊的 ,似乎没有专门的书来给我们讲啊 ,都是看源码不懂了才上网查资料 ,东拼西凑才能看明白的 。有没有人推荐一本系统的讲解内核编程的书来看看啊 。前几天搞proc文件就搞了我一整天才整明白怎么用 郁闷
 
阅读(1711) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~