在 kretprobe 处理程序中获取函数的 return 值
Get a function's return value in a kretprobe handler
我想知道是否可以在内核函数上挂钩 kretprobe 并在 kretprobe 的 return 处理程序中捕获它的 return 值。
这个问题有点老了,但对于那些仍在寻找答案的人来说..
如何注册 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);
}
}
我想知道是否可以在内核函数上挂钩 kretprobe 并在 kretprobe 的 return 处理程序中捕获它的 return 值。
这个问题有点老了,但对于那些仍在寻找答案的人来说..
如何注册 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);
}
}