如何解决从 32 位用户进程发送时,回调未收到文件路径的有效指针
我正在尝试获取 32 位和 64 位进程的 sys_openat
系统调用的打开文件的文件路径。 64 位进程工作正常。对于 32 位进程,我必须注册 __ia32_compat_sys_openat
(而不是 __ia32_sys_opena
t)才能完全调用回调。然而,路径名的指针似乎总是获得指向无效内存 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 举报,一经查实,本站将立刻删除。