linux 内核探测kprobe 初步了解

kprobe(内核探测,kernel probe)是一个动态地收集调试和性能信息的工具。
如,收集寄存器和全局数据结构等调试信息,无需对Linux内核频繁编译和启动。
用户可以在任何内核代码地址进行陷阱,指定调试断点触发时的处理例程。
工作机制是:
    用户指定一个探测点,并把用户定义的处理函数关联到该探测点,当内核执行到该探测点时,相应的关联函数被执行,然后继续执行正常的代码路径。

kprobe允许用户编写内核模块添加调试信息到内核。
用户可以编译一个内核模块,并将内核模块插入到调试的内核中,就可以输出所需要的调试信息了。

内核探测分为kprobe, jprobe和kretprobe(也称return probe,返回探测)三种。kprobe可插入内核中任何指令处;jprobe插入内核函数入口,方便于访问函数的参数;return probe用于探测指定函数的返回值。

内核模块的初始化函数init安装(或注册)了多个探测函数,内核模块的退出函数exit将注销它们。注册函数(如:register_kprobe())指定了探测器插入的地方、探测点触发的处理例程。

配置支持kprobe的内核

配置内核时确信在.config文件中设置了CONFIG_KPROBES、CONFIG_MODULES、CONFIG_MODULE_UNLOAD、CONFIG_KALLSYMS_ALL和CONFIG_DEBUG_INFO。

调试文件系统debugfs含有kprobe的调试接口,可以查看注册的kprobe列表,还可以关闭/打开kprobe。

查看系统注册probe的方法列出如下,样例输出,

#cat /debug/kprobes/list
c015d71a  k  vfs_read+0x0
c011a316  j  do_fork+0x0
c03dedc5  r  tcp_v4_rcv+0x0

第一列表示探测点插入的内核地址,第二列表示内核探测的类型,k表示kprobe,r表示kretprobe,j表示jprobe,第三列指定探测点的"符号+偏移";如果被探测的函数属于一个模块,模块名也被指定;

打开和关闭kprobe的方法列出如下,
#echo ‘1’ /debug/kprobes/enabled
#echo ‘0’ /debug/kprobes/enabled

    在cygwin仿真环境输个命令看一下;仿真环境无法进行此操作;

要配置内核时在.config文件中设置了CONFIG_KPROBES才能使用此功能;看一下cygwin安装目录,没有任何的系统配置的相关文件;

通过基本的了解可知,可以自己编写代码来实现probe;linux系统是否提供自带的一些probe还不了解;先初步了解一下;

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值