本文介绍了Linux内核中绝对路径的相对路径的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在收集挂钩sys_open
和sys_execve
的参数时遇到了一些困难。
示例:
如果文件名为"/root/Desktop/../Downloads"
,我需要将其更改为"/root/Downloads"
。
我想操作系统源代码是有解析的,但我最后读的是"__link_path_walk"
的源代码。
函数"__link_path_walk"
用于处理"../" and "./"
,但该函数似乎没有得到绝对路径,而是得到了最终条目(源代码中注明)。我的操作系统代码版本是linux-2.6.32-754.el6。
如有任何帮助,我们将不胜感激。
推荐答案
我花了2天时间解决了这个问题,我在sys_stat中找到了解决方案,代码如下:
int get_absolute_path(const char __user *filename){
struct path path;
int dfd=AT_FDCWD;
char *ret_ptr=NULL;
int error = -EINVAL,flag=0;
unsigned int lookup_flags = 0;
char *tpath=kmalloc(1024,GFP_KERNEL);
if ((flag & ~(AT_SYMLINK_NOFOLLOW | AT_NO_AUTOMOUNT)) != 0)
goto out;
if (!(flag & AT_SYMLINK_NOFOLLOW))
lookup_flags |= LOOKUP_FOLLOW;
error = user_path_at(dfd, filename, lookup_flags, &path);
if (error)
goto out;
ret_ptr = d_path(&path, tpath, 1024);
printk("%s
",ret_ptr);
kfree(tpath);
return 0;
out:
kfree(tpath);
return error;
}
这篇关于Linux内核中绝对路径的相对路径的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!