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陷入机制,在探测后会自动跳转会原有流程执行。

原文地址: http://blog.chinaunix.net/uid-14528823-id-4567325.html

ftrace、kpatch、systemtap的基本原理、联系和区别相关推荐

  1. ftrace跟踪内核_ftrace、kpatch、systemtap的基本原理、联系和区别

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

  2. linux ftrace原理

    Linux Kernel 行為分析<工具篇>: Ftrace + KernelShark 請用繁體中文和台灣慣用技術術語! 努力修改ing >"<! 敲鍵盤可以保存傳 ...

  3. 【内核模块auth_rpcgss】netns引用计数泄露导致容器弹性网卡残留

    我们不久前定位了一个Linux内核bug,这个bug会影响所有在特权容器中启用了use-gss-proxy的Linux环境,表现为容器的网络命名空间(net namespace)无法彻底释放,导致容器 ...

  4. sql server 连接工具_SQL on file 工具

    无论程序员,还是数据分析师或科研工作者,有很多人都会编写SQL.无论单机上的access,还是局域网中的mysql 或云环境中的Hadoop,也有很多平台都支持SQL.经过半个多世纪的演化,SQL已是 ...

  5. 由STGW下载慢问题引发的网络传输学习之旅

    导语:本文分享了笔者现网遇到的一个文件下载慢的问题.最开始尝试过很多办法,包括域名解析,网络链路分析,AB环境测试,网络抓包等,但依然找不到原因.然后利用网络命令和报文得到的蛛丝马迹,结合内核网络协议 ...

  6. 2021年六月中旬推荐文章

    目录 <内存泄漏一网打尽> <coredump 瘦身风云> <面向敏捷开发团队的 7 个开源项目管理工具> <30 Years Of Linux - An I ...

  7. python基础分析_数据分析之Python基础

    2017年12月1日加入猴子老师的数据分析社群,到今日已经过去了一月有余.我从一个小白,逐渐掌握了Python的基础知识.在此感谢社群里帮助过我的小伙伴,比心! 在初识数据分析中,计划12月底完成Py ...

  8. 程序动态分析工具调研

    转自:http://blog.csdn.net/aneutron/article/details/49251921 目录(?)[+] 综述 本文是对程序动态工具的调研,通对各种动态分析工具的原理.功能 ...

  9. 如何替换一个Linux内核函数的实现-热补丁原理

    昨晚发过誓了.不会再接着写二进制hook的手艺了,今天有网友咨询技术细节,终于又忍不住了- 为了不违背即便是胡乱说出口誓言,今天不写二进制hook,今天用C语言写,二进制只是沾点边儿! 看题目, 替换 ...

最新文章

  1. 全国首个窄带物联网实验局落户福州 助力智慧城市建设
  2. 用 Redis 搞定游戏中的实时排行榜,附源码!
  3. python生成条形码
  4. c#将字符串转换为数组_pandas入门: 时间字符串转换为年月日
  5. 反病毒引擎设计全解(三)
  6. (九)HTML5本地存储——本地数据库SQLLite的使用
  7. hadoop知识整理(2)之MapReduce
  8. Leetcode--287. 寻找重复数(Java)
  9. linux系统的安全机制有哪些内容,系统安全机制
  10. SpringBoot2 整合 ClickHouse数据库,实现高性能数据查询分析
  11. C语言 找出任意两整数之间的素数以及他们的和
  12. 分析:重定向和请求转发
  13. MyBatis的三个基本要素
  14. zabbix 邮件报警 监控mysql主从
  15. Oracle数据库的安装
  16. WPF帝友借贷系统MV模式开发日志2021/04/04_注册验证邮箱验证码发送
  17. adobe安装错误代码183
  18. java 叠加层_java简单设置图层实现图片叠加
  19. Unity-音频播放
  20. OpenCV的Scalar对象怎样初始化,如何取分量值,如何与标量相乘?

热门文章

  1. 服务程序在c#中的写法
  2. (转)Silverlight显示本地图片、Stream转Byte数组
  3. 学习C++的五十个建议(转
  4. 关于jsp中 对只转发结果集的无效操作: last 异常
  5. 苛评VCL: 接口与TObject
  6. [Bug] .NET 2.0 的Bug —— ComboBox中不能添加Component.
  7. TensorFlow 中文文档 介绍
  8. Python学习笔记:常用内建模块7XML
  9. linux命令详解:md5sum命令
  10. 独家干货 | 吴恩达深度学习专项课程精炼笔记!