我使用kprobe监控do_filp_open函数, 获取参数异常,原因在哪里?
代码如下
SEC("kprobe/do_filp_open")
int do_filp_open_exit(struct pt_regs *ctx){
struct filename * pathname = (struct filename *)PT_REGS_PARM2(ctx);
const struct open_flags * op = (struct open_flags *)PT_REGS_PARM3(ctx);
if(op->open_flag & O_CREAT || op->intent & LOOKUP_CREATE) { //运行时这里报错 提示invalid mem access 'inv'
e->type = CREATEFILE;
__builtin_memcpy(e->event_name, "createfile", sizeof("createfile"));
}
}
内核版本是5.4.18
我确认了内核版本的该函数的参数,并无更改
求他检测的一些函数同样使用PT_REGS_PARM3命令可以获取到函数,也排除了宏的问题。
还有什么其他的方法可以分析原因吗?
另外 我在内核5.4版本上要替换我代码中的fexit监控的函数。原本的代码是运行在6.0的 所以支持fexit,同时可以获取到参数和返回值。
在5.4版本上kretprobe只能获取返回值 ,kprobe只能获取参数 有没有其他好的探测方式?