5250 2024-09-27 14:10 采纳率: 0%
浏览 1

使用kprobe监控do_filp_open函数, 参数获取失败,原因在哪里?

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

  • 写回答

1条回答 默认 最新

  • 一轮明月照丘壑 2024-09-27 18:21
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    关于你的问题,我会尝试给出一些可能的解决方案和思路。

    首先,对于在使用 kprobe 监控 do_filp_open 函数时获取参数异常的问题,这可能有几个可能的原因:

    1. 参数位置或类型不正确:你需要确保你获取的参数的位置和类型是正确的。请再次检查 do_filp_open 函数的参数列表,确保你获取的参数位置和类型正确无误。在内核函数参数获取中,如果稍有偏差(如参数位置偏移或者类型不匹配),就可能导致获取失败。此外,也需要注意内核版本差异可能导致函数参数的变化。
    2. 寄存器访问问题:在某些情况下,可能由于某些特定的内核版本或者特定的系统配置,某些寄存器的访问可能存在问题。可以尝试使用其他方法获取参数,例如直接访问函数的栈内存。请注意这是一种相对复杂并且可能存在风险的方法,需要谨慎操作。

    关于在内核 5.4 版本上替换代码中的 fexit 监控函数的问题,由于不同内核版本的功能和API可能存在差异,因此可能需要一些特殊的处理方式。对于你的问题,可以尝试以下方法:

    1. 使用 kretprobe:虽然 kprobe 只能获取参数,但你可以尝试使用 kretprobe 来获取返回值。如果你需要同时获取参数和返回值,可能需要结合使用 kprobe 和 kretprobe。你可以在函数返回前使用 kretprobe 设置一个断点来获取返回值。
    2. 修改代码以适应内核版本:如果可能的话,尝试修改你的代码以适应当前内核版本的功能和API。这可能涉及到一些重构工作,但长期来看可能是解决这个问题的最佳方式。
    3. 寻找替代方案:如果以上方法都无法解决问题,可能需要寻找替代的监控方案。例如,你可以考虑使用其他内核调试工具或方法来实现你的需求。

    最后,关于分析原因的方法,你可以尝试使用内核调试工具(如 SystemTap、Kprobes Trace 等)来获取更多的调试信息,以便更好地定位问题。此外,你也可以查阅相关文档或社区讨论,看看是否有其他人遇到过类似的问题并提供了解决方案。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月27日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?