kprobe_events shell模式使用教程

这篇具有很好参考价值的文章主要介绍了kprobe_events shell模式使用教程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

kprobe_events shell模式使用教程

kprobe

使用前提

需要内核启用以下配置
CONFIG_KPROBES=y
CONFIG_HAVE_KPROBES=y
CONFIG_KPROBE_EVENT=y

kprobe_events

kprobe_events有两种类型:kprobe,kretprobe
kprobe_evnets规则添加的入口:/sys/kernel/debug/tracing/kprobe_events

  1. kprobe
    在函数调用时进行探测,可以用来判断函数是否被调用以及调用函数的传参值是什么.
    用法:
    echo "p:probe1 input_event type=%x1 code=%x2 value=%x3" > /sys/kernel/debug/tracing/kprobe_events
  2. kretprobe
    在函数调用完成后探测,可以用来判断函数执行的结果.
    用法:echo "r:probe2 input_event $retval" > /sys/kernel/debug/tracing/kprobe_events

用法说明:
p代表kprobe模式
r代表kretprobe模式
probe1,probe2为探测点的名称,可以任意命名
input_event被探测的函数
type,code,value自定义字段
%x1,%x2,%x3ARM架构下传参寄存器分别代表探测函数的第2,3,4个参数,用于给自定义字段赋值
$retval用于kretprobe模式,代表探测函数的返回值
如果有多个探测点可以将重定向>替换成追加>>

kprobe模式下如何查看探测函数参数列表中的结构体成员的值
例如:探测函数void hidinput_hid_event(struct hid_device *hid, struct hid_field *field, struct hid_usage *usage, __s32 value),获取usage->hid,usage->type,usage->code的值,并根据hid过滤.

在kernel 4.4.131中:

struct hid_usage {
	unsigned  hid;			/* hid usage code */
	unsigned  collection_index;	/* index into collection array */
	unsigned  usage_index;		/* index into usage array */
	/* hidinput data */
	__u16     code;			/* input driver code */
	__u8      type;			/* input driver type */
	__s8	  hat_min;		/* hat switch fun */
	__s8	  hat_max;		/* ditto */
	__s8	  hat_dir;		/* ditto */
};

其中hid字段结构体内offset=0
code offset=12
type offset=14
echo "p:probeG6 hidinput_hid_event hid=+0(%x2):u32 type=+14(%x2):u8 code=+12(%x2):u16" >> /sys/kernel/debug/tracing/kprobe_events
echo "hid < 0x700e0 || hid > 0x700e7" > /sys/kernel/debug/tracing/events/kprobes/probeG6/filter

%x2获取hidinput_hid_event函数的第3个参数
+0(%x2)对第3个参数进行取值操作
:u32定义数据类型为u32,如果字段为字符串可定义为string
+14(%x2)先对第3个参数进行取值操作,然后+14个字节的偏移

filter

对探测结果进行条件过滤

echo "p:probe1 input_event type=%x1 code=%x2 value=%x3" > /sys/kernel/debug/tracing/kprobe_events
echo "type == 1" > /sys/kernel/debug/tracing/events/kprobes/probe1/filter

type == 1仅输出type值为1的条目,在kretprobe模式下也可以对探测函数的返回值进行过滤.

查看探测输出

cat /sys/kernel/debug/tracing/trace_pipe该操作会阻塞
kprobe输出字段的含义

                                                                                       # tracer: nop
#
# entries-in-buffer/entries-written: 0/0   #P:4
#
#                              _-----=> irqs-off
#                             / _----=> need-resched
#                            | / _---=> hardirq/softirq
#                            || / _--=> preempt-depth
#                            ||| /     delay
#           TASK-PID   CPU#  ||||    TIMESTAMP  FUNCTION
#              | |       |   ||||       |         |

启动kprobe

echo "1" > /sys/kernel/debug/tracing/events/kprobes/enable文章来源地址https://www.toymoban.com/news/detail-467426.html

关闭kprobe

echo "0" > /sys/kernel/debug/tracing/events/enable
echo "" > /sys/kernel/debug/tracing/kprobe_events

到了这里,关于kprobe_events shell模式使用教程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Event 观察者模式, 业务解耦神器

    观察者模式在实际开发过程中是非常常见的一种设计模式。 Spring Event的原理就是观察者模式,只不过有Spring的加持,让我们更加方便的使用这一设计模式。 概念 : 观察者模式又叫发布-订阅模式。 发布指的是当目标对象的状态改变时,它就向它所有的观察者对象发布 状态更

    2024年02月08日
    浏览(64)
  • 无涯教程-HTML Event Reference

    当用户访问您的网站时,他们会执行诸如单击文本和图像以及给定的链接,将鼠标悬停在事物上等操作。这些都是JavaScript称为事件的Example。 我们可以用Javascript或vbscript编写事件处理程序,并可以将这些事件处理程序指定为事件标签属性的值。 HTML 4.01规范定义了19个事件属性,如下

    2024年02月15日
    浏览(32)
  • 【Shell 命令集合 磁盘管理 】Linux 取消挂载 umount命令使用教程

    Shell 命令专栏:Linux Shell 命令全解析 umount命令用于卸载(取消挂载)已经挂载的文件系统,使其从文件系统树中移除。它用于断开文件系统与指定挂载点之间的连接,以便安全地卸载文件系统。 在Linux中,文件系统可以通过挂载的方式与特定的目录关联起来。挂载是将一个文

    2024年02月08日
    浏览(52)
  • 【Shell 命令集合 文件管理】Linux 拆分文件 split命令使用教程

    Shell 命令专栏:Linux Shell 命令全解析 split命令是Linux系统中的一个用于拆分文件的命令。它可以将一个大文件拆分成多个小文件,以便于传输、存储或处理。下面是split命令的详细描述: -b 大小 :指定每个输出文件的大小。大小可以使用后缀(如K、M、G)来表示,默认单位是

    2024年02月10日
    浏览(68)
  • 事件溯源架构模式: Event Sourcing Patterns with Apache Kafka and

    作者:禅与计算机程序设计艺术 在分布式系统中,事件驱动架构(Event-driven architecture)是一种重要的设计模式。它将应用的状态建模为一系列事件,并通过异步通信机制传播这些事件。这种架构非常适用于处理复杂的业务逻辑和实时数据流,因为它能够简化应用的开发,提

    2024年02月08日
    浏览(62)
  • 无涯教程-jQuery - triggerHandler( event, data )方法函数

    triggerHandler(event,[data])方法触发元素(用于特定事件类型)上所有绑定的事件处理程序,而无需执行浏览器的默认操作,冒泡或实时事件。 这是此方法使用的所有参数的描述- event    -  要触发的事件对象或类型。 data     -  这是一个可选参数,表示要作为参数(在事件对象之

    2024年02月15日
    浏览(43)
  • 【Shell 命令集合 磁盘维护 】Linux 检查和修复文件系统错误 fsck命令使用教程

    Shell 命令专栏:Linux Shell 命令全解析 fsck命令是Linux系统中用于检查和修复文件系统错误的工具。它可以扫描并修复文件系统中的损坏、错误或不一致的数据结构,以确保文件系统的正常运行。 fsck命令主要用于以下几个方面: 检查文件系统:fsck命令可以对指定的文件系统进

    2024年02月07日
    浏览(63)
  • 【Shell 命令集合 文件管理】Linux ssh 远程主机之间复制文件 scp 命令使用教程

    Shell 命令专栏:Linux Shell 命令全解析 scp 命令是Linux中用于在远程主机之间复制文件的命令。它的全称是\\\"secure copy\\\",可以通过SSH协议进行安全的文件传输。 scp 命令的基本语法如下: 常用的选项有: -r :递归复制目录及其内容。 -P :指定远程主机的端口号。 -i :指定用于身

    2024年02月09日
    浏览(119)
  • 【Shell 命令集合 磁盘管理 】Linux 列出目录中的文件和子目录 ls命令使用教程

    Shell 命令专栏:Linux Shell 命令全解析 ls命令是Linux系统中常用的一个命令,用于列出目录中的文件和子目录。它的作用是显示当前工作目录中的文件和目录列表。 当我们在终端输入ls命令时,系统会将当前目录中的文件和子目录的名称以及相关信息显示出来。这些信息包括文

    2024年02月08日
    浏览(109)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包