在kretprobe处理程序中获取函数的返回值

时间:2015-07-08 06:31:47

标签: linux-kernel kernel probe kprobe

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

1 个答案:

答案 0 :(得分:2)

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

如何注册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);
    }
}