kprobe document

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中使用寄存器?哪些寄存器有效?

最佳答案

在与kprobe维护人员讨论之后,我得到了答案:
ftrace-kprobe接口不接受像“rax”这样的位宽度前缀,而是接受“ax”。位宽度由体系结构自动选择。所以请从所有参数中删除“r”。如果您想访问eaxax,可以使用typecast,如as%ax:u32

07-28 01:35
查看更多