1024程序员节,OpenHarmony Meetup,技术盛宴,不见不散
我使用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只能获取参数 有没有其他好的探测方式?