内核4.19以上版本如何通过 const char __user *filename 得到完整路径,hook do_mkdir 系统调用,无法得到完整路径。
1条回答 默认 最新
关注 【以下回答由 GPT 生成】
在C语言中,我们可以通过以下步骤来获取完整路径:
- 首先,我们需要通过文件描述符获取文件的真实路径。在Linux系统中,可以使用
readlink
系统调用来完成这个任务。readlink
系统调用接受两个参数:文件描述符和一个指向存储路径的字符串指针。它会将文件的真实路径写入到指针指向的缓冲区中。
#include <unistd.h> ssize_t readlink(const char *pathname, char *buf, size_t bufsize);
其中,
pathname
是文件的路径,buf
是一个缓冲区,用于存储真实路径,bufsize
是缓冲区的大小。- 在Linux内核中,系统调用中的参数是通过寄存器传递的。对于x86架构的系统,我们可以通过
x86_64_regs
结构体中的di
和si
成员来获取系统调用的参数。具体的代码如下:
#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。
希望以上解决方案能对你有所帮助。如果你有任何疑问,请随时追问。
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^解决 无用评论 打赏 举报- 首先,我们需要通过文件描述符获取文件的真实路径。在Linux系统中,可以使用
悬赏问题
- ¥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