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
以下 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