关于 linux 内核:kprobe_events 获取参数在 ARM 上不起作用

kprobe_events fetch arguments doesn't work on ARM

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

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

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

1
2
$ 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 等是指您系统的寄存器。如文档中所暗示的,如果您的架构不是 x86,则需要更改这些:

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

由于您看起来像是在使用arm(raspberry-pi 标签),您可以使用以下内容:

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