kprobe_events 获取参数在 ARM 上不起作用

kprobe_events fetch arguments doesn't work on ARM

以下 kprobe_based 事件示例运行良好:

$ echo 'p:myprobe do_sys_open' > /sys/kernel/debug/tracing/kprobe_events

但是,添加获取参数不起作用:

$ echo 'p:myprobe do_sys_open dfd=%ax filename=%dx flags=%cx mode=+4($stack)' > /sys/kernel/debug/tracing/kprobe_events 
Invalid argument

我认为问题是 %ax, %dx... 它们的含义是什么?我怎样才能使这段代码起作用?

%ax%dx等指的是你系统的寄存器。如 the documentation 中所暗示,如果您的体系结构不是 x86,则需要更改这些:

Note, which register/stack entry is assigned to each function argument depends on arch-specific ABI.

因为看起来你在手臂上(raspberry-pi 标签),你可以使用以下内容:

$ echo 'p:myprobe do_sys_open dfd=%r0 filename=%r1 flags=%r2 mode=%r3' > /sys/kernel/debug/tracing/kprobe_events