swich1234 2023-08-30 09:59 采纳率: 7.7%
浏览 1

内核如何通过 const char __user *filename 得到完整路径

内核4.19以上版本如何通过 const char __user *filename 得到完整路径,hook do_mkdir 系统调用,无法得到完整路径。

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-08-30 12:21
    关注

    【以下回答由 GPT 生成】

    在C语言中,我们可以通过以下步骤来获取完整路径:

    1. 首先,我们需要通过文件描述符获取文件的真实路径。在Linux系统中,可以使用readlink系统调用来完成这个任务。readlink系统调用接受两个参数:文件描述符和一个指向存储路径的字符串指针。它会将文件的真实路径写入到指针指向的缓冲区中。
    #include <unistd.h>
    
    ssize_t readlink(const char *pathname, char *buf, size_t bufsize);
    

    其中,pathname是文件的路径,buf是一个缓冲区,用于存储真实路径,bufsize是缓冲区的大小。

    1. 在Linux内核中,系统调用中的参数是通过寄存器传递的。对于x86架构的系统,我们可以通过x86_64_regs结构体中的disi成员来获取系统调用的参数。具体的代码如下:
    #include <linux/types.h>
    
    asmlinkage long my_do_mkdir(int __unused, const struct pt_regs *regs)
    {
        const char __user *filename = (const char __user *)regs->di;
    
        // 获取完整路径
        char path[PATH_MAX];
        ssize_t ret = readlink(filename, path, PATH_MAX);
        if(ret == -1) {
            // 读取路径失败
        } else {
            // 处理完整路径
        }
    
        // 其他处理逻辑
    
        return 0;
    }
    

    其中,regs->di表示第一个参数(文件名)。

    需要注意的是,这只是一个示例代码,你还需要做一些额外的工作来实际使用这个hook。

    希望以上解决方案能对你有所帮助。如果你有任何疑问,请随时追问。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 8月30日

悬赏问题

  • ¥15 python随机森林对两个excel表格读取,shap报错
  • ¥15 基于STM32心率血氧监测(OLED显示)相关代码运行成功后烧录成功OLED显示屏不显示的原因是什么
  • ¥100 X轴为分离变量(因子变量),如何控制X轴每个分类变量的长度。
  • ¥30 求给定范围的全体素数p的(p-2)/p的连乘积值
  • ¥15 VFP如何使用阿里TTS实现文字转语音?
  • ¥100 需要跳转番茄畅听app的adb命令
  • ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
  • ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
  • ¥15 nginx反向代理获取ip,java获取真实ip