linux filp open,诚意请教一个filp_open的问题。

本文探讨了一段Linux内核模块代码,该模块通过`filp_open`函数以`NULL`参数打开文件,实际上这通常表示当前工作目录。代码中实现了对`readdir`函数的拦截和替换,用于在VFS层劫持系统调用。作者对`opt_fs`为NULL时的含义以及为何要劫持`NULL`文件的`readdir`函数表示困惑,并寻求解答。
摘要由CSDN通过智能技术生成

诚意请教一个filp_open的问题。

发布时间:2007-04-13 10:52:19来源:红联作者:keith_269

诚意请教一个filp_open的问题。

大家应该都知道filp_open(const char * filename, int flags, int mode)是打开文件用的。但我是个菜鸟,遇见个问题,如果filename=NULL时打开的是哪个文件,是pwd显示的当前目录吗,还是另有高深含义?请高手不吝指教!

谢先!

其实我在看下面的代码,通过vfs层来劫持系统调用。但不知道这个opt_fs为什么为NULL,为什么要对NULL的文件截获readdir这个函数???

望不吝赐教!!!

MODULE_AUTHOR("xunil@BMY");

MODULE_DESCRIPTION("By utilizing the VFS filesystem, this module can capture

system calls.");

MODULE_LICENSE("GPL");

char *opt_fs=NULL; //

typedef int (*readdir_t)(struct file *,void *,filldir_t);

readdir_t orig_opt_readdir=NULL;

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

{

int r;

printk("<1>You got me partner!\n");

r=orig_opt_readdir(fp,buf,filldir);

return r;

}

int patch_vfs(const char *p,readdir_t *orig_readdir,readdir_t new_readdir)

{

struct file *filep;

filep=filp_open(p,O_RDONLY,0);//if(IS_ERR(filep))

return -1;

if(orig_readdir)

*orig_readdir=filep->f_op->readdir;

filep->f_op->readdir=new_readdir;

filp_close(filep,0);

return 0;

}

int unpatch_vfs(const char *p,readdir_t orig_readdir)

{

struct file *filep;

filep=filp_open(p,O_RDONLY,0);

if(IS_ERR(filep))

return -1;

filep->f_op->readdir=orig_readdir;

filp_close(filep,0);

return 0;

}

static int patch_init(void)

{

patch_vfs(opt_fs,&orig_opt_readdir,myreaddir);

printk("<1>VFS is patched!\n");

return 0;

}

static void patch_cleanup(void)

{

unpatch_vfs(opt_fs,orig_opt_readdir);

printk("<1>VFS is unpatched!\n");

}

module_init(patch_init);

module_exit(patch_cleanup);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值