【问题标题】:Get a function's return value in a kretprobe handler在 kretprobe 处理程序中获取函数的返回值
【发布时间】:2015-09-25 21:59:42
【问题描述】:

我想知道是否可以将 kretprobe 挂接到内核函数上并在 kretprobe 的返回处理程序中捕获它的返回值。

【问题讨论】:

  • kprobe 文档(内核源代码中的Documentation/kprobes.txt)和它引用的 kretprobe 示例(samples/kprobes/kretprobe_example.c)有什么问题?
  • 它没有提到任何关于捕获返回值的内容,是吗?
  • Line int retval = regs_return_value(regs); in ret_handler 捕获返回值。您可以通过函数的描述和变量的名称来猜测。

标签: linux-kernel kernel probe kprobe


【解决方案1】:

这是一个有点老的问题,但对于那些仍在寻找答案的人..

如何注册 kretprobe 您可以在 kprobes 的文档中看到 (https://www.kernel.org/doc/Documentation/kprobes.txt)

从系统调用中获取 ret 值的独立于架构的函数:

#include <linux/ptrace.h>

...

int hook_retcode(struct kretprobe_instance *ri, struct pt_regs *regs)
{
    unsigned long retval = 0;

    retval = regs_return_value(regs);

    if (is_syscall_success(regs))
    {
        printk("%pf exited with a code %#lx\n", ri->rp->kp.addr, retval);
    }
    else
    {
        printk("%pf failed with a code %#lx\n", ri->rp->kp.addr, retval);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-07
    • 2020-01-18
    • 2021-08-08
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    相关资源
    最近更新 更多