本文介绍了Linux内核中绝对路径的相对路径的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在收集挂钩sys_opensys_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内核中绝对路径的相对路径的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-11 13:12