2

以下基于 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...它们的含义是什么?我怎样才能使这段代码工作?

4

1 回答 1

1

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

请注意,分配给每个函数参数的寄存器/堆栈条目取决于特定于架构的 ABI。

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

$ echo 'p:myprobe do_sys_open dfd=%r0 filename=%r1 flags=%r2 mode=%r3' > /sys/kernel/debug/tracing/kprobe_events
于 2018-05-12T08:45:20.620 回答