我使用kprobe监控do_filp_open函数, 获取参数异常,原因在哪里?

osc_05691518 发布于 09/27 13:57
阅读 80
收藏 0

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只能获取参数 有没有其他好的探测方式?

加载中
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部