1

来自kprobe 文档

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

据我了解,在X86_64平台上,参数应该传递到寄存器中(请参阅X86_64 syscalls)。所以我认为添加探针应该是这样的:

echo 'p:myprobe do_sys_open dfd=%rdi filename=%rsi flags=%rdx mode=%rcx' > /sys/kernel/debug/tracing/kprobe_events

但是执行上面的语句,bash报错:

-bash: echo: write error: Invalid argument

所以我的问题是:如何使用寄存器kprobe?哪些寄存器有效?

4

1 回答 1

2

kprobe维护者讨论后,我得到了答案:

ftrace-kprobe接口不接受像 ' rax' 这样的位宽前缀,而是接受 ' ax'。位宽由体系结构自动选择。所以请r从所有参数中删除 ' '。如果你想访问eaxor ax,你可以使用类型转换,比如 as %ax:u32

于 2015-11-05T03:40:24.563 回答