深入探索Kretprobes:调试利器的全面指南
1. 开启Kretprobes之旅
在之前了解了静态kprobes的编码方法后,现在来学习kretprobe。kretprobe是kprobe的有趣对应物,它能让我们获取大多数内核或模块函数的返回值,这在调试场景中可能是一个关键因素。
相关的kretprobe API非常直观:
#include <linux/kprobes.h>
int register_kretprobe(struct kretprobe *rp);
void unregister_kretprobe(struct kretprobe *rp);
register_kretprobe() 函数成功时返回0,失败时返回负的errno值。
1.1 errno值及其含义
errno是每个进程未初始化数据段中的一个整数,当系统调用失败时,程序员可以通过查看errno来查询错误诊断信息。内核或底层驱动会返回适当的负errno整数,glibc胶水代码会将其乘以 -1 变为正数,该值可作为英文错误消息二维数组的索引,可通过 [p]error(3) 或 strerror(3) glibc API 方便地查找。可以使用用户空间头文件 /usr/include/asm-generic/errno-base.h (涵盖errno值1到34)和 /usr/include/asm-generic/errno.h
超级会员免费看
订阅专栏 解锁全文


被折叠的 条评论
为什么被折叠?



