从 32 位用户进程发送时,回调未收到文件路径的有效指针

问题描述

我正在尝试获取 32 位和 64 位进程的 sys_openat 系统调用的打开文件文件路径。 64 位进程工作正常。对于 32 位进程,我必须注册 __ia32_compat_sys_openat(而不是 __ia32_sys_openat)才能完全调用回调。然而,路径名的指针似乎总是获得指向无效内存 00000000e662cc4c 的相同地址,ctx->si 指向相同的地址。标志通过良好,所以似乎我在转换 32 位路径名地址所需的文档中遗漏了一些内容

int syscall__openat(struct pt_regs *ctx,int dirfd,const char __user *pathname,int flags) {
    u32 pid = bpf_get_current_pid_tgid() & 0xFFFFFFFF;    

    char buf[64];
    int len = bpf_probe_read_str(buf,sizeof(buf),pathname);
    bpf_trace_printk("**OPENAT len %d\n",len);
    bpf_trace_printk("**OPENAT %p Pid %d pathname: %s\n",pathname,pid,buf);
    bpf_trace_printk("**OPENAT flags %d\n",flags);
    return 0;
}

谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)