Linux kernel 获取一个函数';s在kretprobe处理程序中返回值
我想知道是否有可能将kretprobe挂接到内核函数上,并在kretprobe的返回处理程序中捕获它的返回值。这是一个有点老的问题,但对于那些仍在寻找答案的人来说 如何注册kretprobe,您可以在kprobes()的文档中看到 一个独立于体系结构的函数,用于从系统调用中捕获ret值:Linux kernel 获取一个函数';s在kretprobe处理程序中返回值,linux-kernel,kernel,probe,kprobe,Linux Kernel,Kernel,Probe,Kprobe,我想知道是否有可能将kretprobe挂接到内核函数上,并在kretprobe的返回处理程序中捕获它的返回值。这是一个有点老的问题,但对于那些仍在寻找答案的人来说 如何注册kretprobe,您可以在kprobes()的文档中看到 一个独立于体系结构的函数,用于从系统调用中捕获ret值: #include <linux/ptrace.h> ... int hook_retcode(struct kretprobe_instance *ri, struct pt_regs *reg
#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);
}
}
#包括
...
int hook_retcode(结构kretprobe_实例*ri,结构pt_regs*regs)
{
无符号长检索=0;
retval=regs\u返回值(regs);
if(is_syscall_success(regs))
{
printk(“%pf退出,代码为%#lx\n”,ri->rp->kp.addr,retval);
}
其他的
{
printk(“%pf失败,代码为%#lx\n”,ri->rp->kp.addr,retval);
}
}
kprobe文档(documentation/kprobes.txt
内核源代码)和它引用的kretprobe示例(samples/kprobes/kretprobe\u example.c
)有什么问题?它没有提到捕获返回值的任何内容,是吗?行int-retval=regs\u return\u value(regs)ret\u处理程序中的code>捕获返回值。您可以通过函数的描述和变量的名称来猜测。