2015-10-13 91 views
1

kprobe document如何在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?哪些寄存器有效?

回答

2

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

ftrace-kprobe接口不接受位宽前缀,如“rax”而是接受“ax”。该位宽由架构自动选择。所以请从所有参数中删除'r'。如果您想访问eaxax,则可以使用类型转换,如%ax:u32

相关问题