1、ftrace

Linux当前版本中,功能最强大的调试、跟踪手段。其最基本的功能是提供了动态和静态探测点,用于探测内核中指定位置上的相关信息。

静态探测点,是在内核代码中调用ftrace提供的相应接口实现,称之为静态是因为,是在内核代码中写死的,静态编译到内核代码中的,在内核编译后,就不能再动态修改。在开启ftrace相关的内核配置选项后,内核中已经在一些关键的地方设置了静态探测点,需要使用时,即可查看到相应的信息。

动态探测点,基本原理为:利用mcount机制,在内核编译时,在每个函数入口保留数个字节,然后在使用ftrace时,将保留的字节替换为需要的指令,比如跳转到需要的执行探测操作的代码。

2、kpatch

kpatch是RedHat主导开发的“内核在线升级”工具,可在不重启系统、不中断业务的情况下实现内核在线升级。实现函数级别的执行流程替换。

其基本原理为:基于ftrace,类似于ftrace的动态探测点,利用mcount机制,在内核编译时,在每个函数入口保留数个字节,然后在打补丁时,将“被替换函数”入口保留的字节替换为跳转指令,跳转到kpatch的相关流程中,然后进入“新函数”的执行流程,实现函数级别的执行流程在线替换,最终实现“内核在线升级”的功能。

3、systemTap

另一个具有探测功能的工具,不得不提systemTap。

其原理跟ftrace不同,其基本原理为:在运行systemTap脚本时,动态解析内核,将指定探测点处的代码,替换为int 3指令,实现陷入,在陷入后实现相关信息的探测,探测完成后,int 3返回到原有的执行流程中执行。

4、ftrace和systemTap机制的主要区别

1)ftrace只能在函数入口(或出口?)实现探测,而systemTap可以在函数中的任意位置实现探测。

2)ftrace实现函数替换后,原有函数的执行流程被替换成新函数,新函数执行完成后可以不再返回原函数流程中执行。而systemTap利用的是int 3陷入机制,在探测后会自动跳转会原有流程执行。

阅读(12) | 评论(0) | 转发(0) |

ftrace跟踪内核_ftrace、kpatch、systemtap的基本原理、联系和区别相关推荐

  1. ftrace跟踪内核_ftrace追踪内核函数调用

    前言:在追踪内核的网络栈时,经常会出现复杂的条件分支,导致分不清报文处理的重要流程,本文介绍的ftrace则能够追踪记录函数的调用流程,非常方便的用以分析代码. 一. ftrace简单介绍 ​ftra ...

  2. 使用 ftrace 跟踪内核

    转自:https://blog.csdn.net/qq_33487044/article/details/81750993 https://blog.csdn.net/aneutron/article ...

  3. ftrace跟踪内核_用Ftrace跟踪内核模块

    如果你需要分析一个内核模块的函数调用数或者希望得到各语句段的执行时间,那么这篇文章很适合您. Ftrace抛开内核代码跟踪领域的对手如KFT等进入Linux官方内核,正说明其功能强大性能稳定.Ftra ...

  4. 内核探测工具systemtap简介

    systemtap是内核开发者必须要掌握的一个工具,本文我将简单介绍一下此工具,后续将会有系列文章介绍systemtap的用法. 什么是systemtap 假如现在有这么一个需求:需要获取正在运行的L ...

  5. linux标准c和c编译器6,linux内核中GNU C和标准C的区别

    linux内核中GNU C和标准C的区别 今天看了一下午的linux内核编程方面的内容,发现linux 内核中GNU C与标准C有一些差别,特记录如下: linux 系统上可用的C编译器是GNU C编 ...

  6. ftrace、kpatch、systemtap的基本原理、联系和区别

    1.ftrace Linux当前版本中,功能最强大的调试.跟踪手段.其最基本的功能是提供了动态和静态探测点,用于探测内核中指定位置上的相关信息. 静态探测点,是在内核代码中调用ftrace提供的相应接 ...

  7. ​内核调试技巧--systemtap定位丢包原因

    作者:wqiangwang,腾讯 TEG 后台开发工程师 内核收发包,可能会由于backlog队列满.内存不足.包校验失败.特性开关如rpf.路由不可达.端口未监听等等因素将包丢弃. 在内核里面,数据 ...

  8. Linux内核原子操作(1)基本原理

    概述 原子(atomic)本意是"不能被进一步分割的最小粒子",而原子操作(atomic operation)意为"不可被中断的一个或一系列操作",可以保证指令 ...

  9. linux 中断和进程 传递,Linux内核之进程上下文和中断上下文的区别

    进程上下文和中断上下文是操作系统中很重要的两个概念,这两个概念在操作系统课程中不断被提及,是最经常接触.看上去很懂但又说不清楚到底怎么回事.造成这种局面的原因,可能是原来接触到的操作系统课程的教学总停 ...

最新文章

  1. Springboot引用外部配置文件
  2. php微信小程序向下滑动,微信小程序功能实现:上滑加载下拉刷新
  3. 劳动力工资调整模型的探讨——数学建模
  4. java servlet获取url参数_Java Servlet如何获取请求的参数值?
  5. [hackinglab][CTF][脚本关][2020] hackinglab 脚本关 writeup
  6. 使用PDO连接数据库 查询和插入乱码的解决方法
  7. NRF52832学习笔记
  8. 在ubuntu上安装微博AIR
  9. Oracle with..as使用方法
  10. 保存书店每日交易记录程序设计
  11. Data Base学习记录:关系模型
  12. html5光线传感器,光线传感器是什么 光线传感器分类
  13. python 识别汉字、数字、字母,实现半角及全角之间的转换
  14. Java多线程socket网络协议传输
  15. 中关村刀片机服务器销售,刀片服务器
  16. JS生成浏览器唯一标识解决方案
  17. wish平台怎么样?wish跨境电商好做吗?
  18. 在Linux(BackTrack5)下安装卡无线网
  19. [超详细] Git 远程仓库及回滚日志操作
  20. oracle 表空间 Managing Tablespace Data Files

热门文章

  1. 【转载】Java JVM 运行机制及基本原理
  2. android系统各个输出log对应层次文件
  3. 经常使用的android弹出对话框
  4. sql2000数据库置疑
  5. C#设计模式之享元模式(Flyweight)
  6. Error:Execution failed for task ':myapp:dexDebug'. com.android.ide.common.process.ProcessExcepti
  7. Unity中的淡入淡出效果
  8. Android中的ABI
  9. /D _WINDOWS, /D _CONSOLE
  10. [置顶] 自己动手实现OpenGL之glViewPort(一)