kprobes_使用Kprobes进行内核调试

kprobes

Kprobes是Linux中的一种简单轻量级的机制,它允许您将断点插入正在运行的内核中。 Kprobes提供了一个接口,可闯入任何内核例程并从中断处理程序中无中断地收集信息。 使用Kprobes可以轻松收集调试信息,例如处理器寄存器和全局数据结构。 开发人员甚至可以使用Kprobes修改寄存器值和全局数据结构值。

为此,Kprobes通过在正在运行的内核中的给定地址处动态编写断点指令来插入探针。 执行所探查的指令会导致断点错误。 Kprobes挂接到断点处理程序并收集调试信息。 Kprobes甚至可以单步探查指令。

安装

要安装Kprobes的,请从Kprobes的主页上最新的补丁(请参阅相关信息中的链接)。 tar文件将按照kprobes-2.6.8-rc1.tar.gz的名称命名。 解压缩补丁并将其应用于Linux内核:

$tar -xvzf kprobes-2.6.8-rc1.tar.gz
$cd /usr/src/linux-2.6.8-rc1
$patch -p1 < ../kprobes-2.6.8-rc1-base.patch

Kprobes利用SysRq密钥,这是DOS时代的一种产物 ,在Linux下发现了许多新用途(请参阅参考资料 )。 您会在Scroll Lock键的左侧找到SysRq键; 它通常也被标记为Print Screen 。 要为Kprobes启用SysRq密钥,请应用kprobes-2.6.8-rc1-sysrq.patch修补程序:

$patch -p1 < ../kprobes-2.6.8-rc1-sysrq.patch

使用make xconfig/ make menuconfig/ make oldconfig配置内核,并启用CONFIG_KPROBESCONFIG_MAGIC_SYSRQ标志。 构建并引导到新内核。 现在,您可以通过编写简单的Kprobes模块来插入printk并动态且毫不费力地收集调试信息。

编写Kprobes模块

对于每个探针,您将需要分配结构struct kprobe kp; (有关更多信息,请参见include / linux / kprobes.h)。

清单1.定义前置,后置和故障处理程序
/* pre_handler: this is called just before the pr
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值