【问题标题】:`do_sys_open` vs `__x86_sys_open` when attaching kprobe附加 kprobe 时的 `do_sys_open` 与 `__x86_sys_open`
【发布时间】:2021-12-28 23:54:45
【问题描述】:

我尝试过运行opensnoop.py,但使用的是

fnname_open='do_sys_open'

(我在其他 scripts 看到过)而不是

fnname_open = b.get_syscall_prefix().decode() + 'open'
# = '__x86_sys_open' on Ubuntu 18.04

但脚本随后会停止打印文件名。造成这种差异的原因是什么?

当使用attach_kprobe(event=fn)fn 是系统调用还是事件?

您是否按照here 的描述从/proc/kallsyms 获得可能的系统调用列表?

【问题讨论】:

    标签: system-calls ebpf kprobe


    【解决方案1】:

    如果将 BPF 程序附加到 do_sys_open,则附加到 __x86_sys_open 的 BPF 程序将不会有相同的结果,因为这两个函数没有相同的原型:

    long do_sys_open(int dfd, const char __user *filename, int flags, umode_t mode);
    long sys_open(const char __user *filename, int flags, umode_t mode);
    

    因此,例如,filename 参数不会存储在同一个寄存器中,具体取决于您跟踪的函数。您还需要编辑 BPF 程序来解决此问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-30
      • 1970-01-01
      • 2021-08-18
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多