vfs 层如何拦截read/write

来源:互联网 发布:java char 转string 编辑:程序博客网 时间:2024/06/05 18:02

这个是转网上唯一的一个还是待解决的代码,有没有人做过啊,大家都需要交流学习嘛.

     替 换file_operations,打开一个文件(我打开的是/),得到该fs的file_operations指针,替换。
下面是代码。
int patch_vfs(const char* p)
{
struct file* filep;
filep = filp_open(p, O_RDONLY, 0);
if (IS_ERR(filep)){
printk("<1> can not open file/n");
return -1;
}
orig_read = filep->f_op->read;
orig_write = filep->f_op->write;
orig_readdir = filep->f_op->readdir;
orig_ioctl = filep->f_op->ioctl;
orig_open = filep->f_op->open;
orig_lock = filep->f_op->lock;
orig_mmap = filep->f_op->mmap;
orig_release = filep->f_op->release;

filep->f_op->read = my_read;
filep->f_op->write = my_write;
filep->f_op->readdir = my_readdir;
filep->f_op->ioctl = my_ioctl;
filep->f_op->open = my_open;
filep->f_op->lock = my_lock;
filep->f_op->mmap = my_mmap;
filep->f_op->release = my_release;

filp_close(filep, 0);
return 0;
}

static int patch_init(void)
{
if (patch_vfs(root_fs) != 0) return -1;
printk("<1> VFS patched/n");
return 0;
}

module_init(patch_init);

 

 

--------------------------------------------------------------------------------------

orig_*= filep->f_op->*;

filep->f_op->*= my_*;

这个替换我觉得现在行不通.  是也没什么效果,主要是只要一加就会组错误.

原创粉丝点击