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
中使用寄存器?哪些寄存器有效?
答案 0 :(得分:2)
在与kprobe
维护者讨论后,我得到答案:
ftrace-kprobe
接口不接受位宽前缀,例如' rax
'相反,它接受' ax
'。位宽由架构自动选择。所以请删除&{39; r
'从所有论点。如果您想要访问eax
或ax
,则可以使用类型转换,例如%ax:u32
。