【问题标题】:How to use registers in kprobe?如何在 kprobe 中使用寄存器?
【发布时间】:2016-01-10 19:45:55
【问题描述】:

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

【问题讨论】:

    标签: linux linux-kernel trace kprobe


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-03-23
      • 1970-01-01
      • 2010-12-02
      • 1970-01-01
      • 1970-01-01
      • 2011-01-05
      • 1970-01-01
      • 2019-04-21
      • 1970-01-01
      相关资源
      最近更新 更多