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还不了解;先初步了解一下;

linux 内核探测kprobe 初步了解相关推荐

  1. linux 内核学习线索初步

    1. 系统的启动和初始化 在基于Intel的系统上,当 loadlin.exe 或 LILO把内核装入到内存并把控制权传递给内核时,内核开始启动.关于这一部分,看arch/i386/kernel/he ...

  2. Linux内核:kprobe机制-探测点

    目录 概述 实例 深入探究 是否只能基于symbol_name做kprobe? kprobe是如何动态添加探针的? post钩子为什么会用到single step fault_handler 钩子什么 ...

  3. Linux内核 eBPF基础:kprobe原理源码分析:源码分析

    Linux内核 eBPF基础 kprobe原理源码分析:源码分析 荣涛 2021年5月11日 在 <Linux内核 eBPF基础:kprobe原理源码分析:基本介绍与使用>中已经介绍了kp ...

  4. Linux内核 eBPF基础:kprobe原理源码分析:基本介绍与使用示例

    Linux内核 eBPF基础 kprobe原理源码分析:基本介绍与使用示例 荣涛 2021年5月11日 kprobe调试技术是为了便于跟踪内核函数执行状态所设计的一种轻量级内核调试技术. 利用kpro ...

  5. Linux内核 eBPF基础:ftrace源码分析:过滤函数和开启追踪

    Linux内核 eBPF基础 ftrace基础:过滤函数和开启追踪 荣涛 2021年5月12日 本文相关注释代码:https://github.com/Rtoax/linux-5.10.13 上篇文章 ...

  6. Linux内核 eBPF基础:ftrace基础-ftrace_init初始化

    Linux内核 eBPF基础 ftrace基础:ftrace_init初始化 荣涛 2021年5月12日 本文相关注释代码:https://github.com/Rtoax/linux-5.10.13 ...

  7. Linux内核调试方法【转】

    转自:http://www.cnblogs.com/shineshqw/articles/2359114.html kdb:只能在汇编代码级进行调试: 优点是不需要两台机器进行调试. gdb:在调试模 ...

  8. 第十期-Linux内核补丁源码分析(2)

    作者:罗宇哲,中国科学院软件研究所智能软件研究中心 在上一期中,我们通过CAKE系统的实例介绍了一种对Linux内核补丁的初步分析方法,这一期我们将继续通过CAKE系统的例子介绍一种对补丁文件源码的分 ...

  9. linux内核调试技术 kprobe使用与实现

    Linux kprobes调试技术是内核开发者们专门为了便于跟踪内核函数执行状态所设计的一种轻量级内核调试技术.利用kprobes技术,内核开发人员可以在内核的绝大多数指定函数中动态的插入探测点来收集 ...

最新文章

  1. 彭旭老师《项目管理中的领导力与团队建设》
  2. 多线程:为什么wait()需要放在循环中?
  3. BugKuCTF 杂项 签到题
  4. Swift之深入解析如何将代码添加为自定义LLDB命令
  5. IntelliJ IDEA for Mac在MacOS模式下的搜索/查询/查找快捷键(Search Shortcut)
  6. NS3Gym python侧代码分析
  7. cmake字符串转数组_掌握常用的数据结构之数组和字符串
  8. Linux卸载jdk
  9. 面试硬核干货:纯CSS实现垂直居中,快来收藏吧
  10. mac电脑上如何看java jdk文档
  11. python在冒号处显示语法错误_python中的语法错误
  12. boost/mpl/assert.hpp:189:21: error: unnecessary parentheses in declaration of ‘assert_arg‘ [-Werror=
  13. vlookup和sumif函数使用通配符
  14. latex 显示黑色的点命令 black dot.
  15. 如何管理一盘散沙的团队?
  16. 珊瑚虫工作室_2007-12-24
  17. 修改战网服务器,使命召唤16现代战争怎么改战网地区_修改战网客户端的方法_3DM单机...
  18. OFDM正交频分复用——详解——5G-LTE知识必备
  19. Paper Reading(1) : ICLR2015_Explaining and Harnessing Adversarial Examples
  20. 一个事物两个方面的对比举例_对比属于修辞手法吗

热门文章

  1. 数据结构源码笔记(C语言):分块法查找
  2. linux中ramdisk的使用
  3. python没有上方工具栏_Python体验(08)-图形界面之工具栏和状态栏
  4. js const 和 var 的区别
  5. 箭头函数参数和返回值
  6. Python 技术篇-百度语音识别API接口调用演示
  7. PyQt5 技术篇-如何彻底删除控件?布局移除控件方法。
  8. warpPerspective函数
  9. opencv图像边界的填充
  10. 第二章:2.6 LTI系统特性与单位冲击信号的关系