附加 kprobe 时,`do_sys_open` 与 `__x86_sys_open`

`do_sys_open` vs `__x86_sys_open` when attaching kprobe

我试过 运行 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系统调用还是事件?

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

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

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 程序来修复此问题。