分享
 
 
 

VFS层拦截read/writefile_operations函数无效

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

改变read,write,readdir,open,release等函数指针,发现readdir可以正常获得目录名,open,release只能截获目录的操作, read,write完全截获不了任何操作。 请问各位大虾有遇到类似问题吗。现在感觉上是对目录的操作都能截获,但是对文件操作的就完全没有。

readdir(工作正常) 和 read 代码如下

int my_readdir(struct file *fp, void *buf, filldir_t filldir)

{

char *path = (char*)kmalloc(MAX_DIR_LENTH);

unsigned int offset = MAX_DIR_LENTH-1;

struct dentry* cwd = fp->f_dentry;

int rs;

path[MAX_DIR_LENTH-1] = '\0';

// path add one slash in the end

path[--offset] = '/';

while( cwd->d_parent != cwd ) {

offset -= cwd->d_name.len;

strncpy(path + offset, cwd->d_name.name, cwd->d_name.len);

path[--offset] = '/';

cwd = cwd->d_parent;

}

if (offset == MAX_DIR_LENTH-1) path[--offset] = '/';

printk("<1> Read Dir %s\n", path+offset);

kfree(path);

if (orig_readdir == NULL) {

printk("<1> orig read dir function is NULL\n");

return -1;

}

rs = orig_readdir(fp, buf, filldir);

return rs;

}

ssize_t my_read (struct file *fp, char *buf, size_t len, loff_t *off)

{

int rs;

printk("<1> enter my read \n"); //这也没有输出

char *path = (char*)kmalloc(MAX_DIR_LENTH);

unsigned int offset = MAX_DIR_LENTH-1;

struct dentry* cwd = fp->f_dentry;

path[MAX_DIR_LENTH-1] = '\0';

while( cwd->d_parent != cwd ) {

offset -= cwd->d_name.len;

strncpy(path + offset, cwd->d_name.name, cwd->d_name.len);

path[--offset] = '/';

cwd = cwd->d_parent;

}

printk("<1> Read file %s\n", path+offset);

kfree(path);

if (orig_read == NULL) {

printk("<1> orig read function is NULL\n");

return -1;

}

rs = orig_read(fp, buf, len, off);

return rs;

}

替换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);

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有