问题描述
我正在尝试获取 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 (将#修改为@)