如何在kprobe中使用寄存器?

时间:2015-10-13 07:06:24

标签: linux linux-kernel trace kprobe

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

1 个答案:

答案 0 :(得分:2)

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

ftrace-kprobe接口不接受位宽前缀,例如' rax'相反,它接受' ax'。位宽由架构自动选择。所以请删除&{39; r'从所有论点。如果您想要访问eaxax,则可以使用类型转换,例如%ax:u32