Linux内核调试利器:Kprobes、Kexec与Kdump详解
1. 内核探针(Kernel Probes)概述
内核探针能够深入内核函数,提取调试信息或应用修复补丁。在客户现场排查难以解释的问题时,尤其是无法重启系统的情况下,它是调试工具库中非常有用的补充。Linux支持一种通用的内核探针形式,即Kprobes,以及两种专门的变体:Jprobes和返回探针。
1.1 Kprobes
Kprobes可以动态转储内核数据结构或向正在运行的内核中插入代码,从而避免了构建和启动调试内核的麻烦。例如,可以在不重新编译内核的情况下,在调度器中动态添加几个 printk 语句。甚至可以在不重启火星探测器的情况下修复其中的漏洞。
1.1.1 插入Kprobe的步骤
- 在核配置菜单中开启
CONFIG_KPROBES(Instrumentation Support > Kprobes)。 - 实现一个内核模块,在感兴趣的指令处注册一个Kprobe。需要注册一个预处理器(pre-handler),在探测指令执行之前运行;一个后处理器(post-handler),在探测指令执行之后运行;还可以提供一个错误处理器(fault-handler),在执行预处理器或后处理器时检测到错误时运行。
当注册一个Kprobe时,它会保存被探测的指令,并用一个生成断点的指令(在基于x86的系统上是 int 0x03 )替换它。当断点被触发时,内核会生成一个死亡通知。Kpr
超级会员免费看
订阅专栏 解锁全文

1135

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



