主頁 > 作業系統 > kprobe_events shell模式使用教程

kprobe_events shell模式使用教程

2023-06-02 09:28:38 作業系統

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=https://www.cnblogs.com/forwards/p/%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=https://www.cnblogs.com/forwards/p/%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

關閉kprobe

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

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/554104.html

標籤:Linux

上一篇:STM32-RTC

下一篇:返回列表

標籤雲
其他(160197) Python(38196) JavaScript(25473) Java(18173) C(15236) 區塊鏈(8269) C#(7972) AI(7469) 爪哇(7425) MySQL(7222) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5873) 数组(5741) R(5409) Linux(5345) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4580) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2434) ASP.NET(2403) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1980) 功能(1967) Web開發(1951) HtmlCss(1951) C++(1928) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1879) .NETCore(1863) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • CA和證書

    1、在 CentOS7 中使用 gpg 創建 RSA 非對稱密鑰對 gpg --gen-key #Centos上生成公鑰/密鑰對(存放在家目錄.gnupg/) 2、將 CentOS7 匯出的公鑰,拷貝到 CentOS8 中,在 CentOS8 中使用 CentOS7 的公鑰加密一個檔案 gpg -a ......

    uj5u.com 2020-09-10 00:09:53 more
  • Kubernetes K8S之資源控制器Job和CronJob詳解

    Kubernetes的資源控制器Job和CronJob詳解與示例 ......

    uj5u.com 2020-09-10 00:10:45 more
  • VMware下安裝CentOS

    VMware下安裝CentOS 一、軟硬體準備 1 Centos鏡像準備 1.1 CentOS鏡像下載地址 下載地址 1.2 CentOS鏡像下載程序 點擊下載地址進入如下圖的網站,選擇需要下載的版本,這里選擇的是Centos8,點擊如圖所示。 決定選擇Centos8后,選擇想要的鏡像源進行下載,此 ......

    uj5u.com 2020-09-10 00:12:10 more
  • 如何使用Grep命令查找多個字串

    如何使用Grep 命令查找多個字串 大家好,我是良許! 今天向大家介紹一個非常有用的技巧,那就是使用 grep 命令查找多個字串。 簡單介紹一下,grep 命令可以理解為是一個功能強大的命令列工具,可以用它在一個或多個輸入檔案中搜索與正則運算式相匹配的文本,然后再將每個匹配的文本用標準輸出的格式 ......

    uj5u.com 2020-09-10 00:12:28 more
  • git配置http代理

    git配置http代理 經常遇到克隆 github 慢的問題,這里記錄一下幾種配置 git 代理的方法,解決 clone github 過慢。 目錄 git配置代理 git單獨配置github代理 git配置全域代理 配置終端環境變數 git配置代理 主要使用 git config 命令 git單獨 ......

    uj5u.com 2020-09-10 00:12:33 more
  • Linux npm install 裝包時提示Error EACCES permission denied解

    npm install 裝包時提示Error EACCES permission denied解決辦法 ......

    uj5u.com 2020-09-10 00:12:53 more
  • Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包

    Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包。 18 (flaskApi) [root@67 flaskDemo]# yum -y install nginx 19 已加載插件:fastestmirror, langpacks 20 Loading ......

    uj5u.com 2020-09-10 00:13:13 more
  • Linux查看服務器暴力破解ssh IP

    在公網的服務器上經常遇到別人爆破你服務器的22埠,用來挖礦或者干其他嘿嘿嘿的事情~ 這種情況下正確的做法是: 修改默認ssh的22埠 使用設定密鑰登錄或者白名單ip登錄 建議服務器密碼為復雜密碼 創建普通用戶登錄服務器(root權限過大) 建立堡壘機,實作統一管理服務器 統計爆破IP [root ......

    uj5u.com 2020-09-10 00:13:17 more
  • CentOS 7系統常見快捷鍵操作方式

    Linux系統中一些常見的快捷方式,可有效提高操作效率,在某些時刻也能避免操作失誤帶來的問題。 ......

    uj5u.com 2020-09-10 00:13:31 more
  • CentOS 7作業系統目錄結構介紹

    作業系統存在著大量的資料檔案資訊,相應檔案資訊會存在于系統相應目錄中,為了更好的管理資料資訊,會將系統進行一些目錄規劃,不同目錄存放不同的資源。 ......

    uj5u.com 2020-09-10 00:13:35 more
最新发布
  • kprobe_events shell模式使用教程

    kprobe_events shell模式使用教程 kprobe 使用前提 需要內核啟用以下配置 CONFIG_KPROBES=y CONFIG_HAVE_KPROBES=y CONFIG_KPROBE_EVENT=y kprobe_events kprobe_events有兩種型別:kprobe, ......

    uj5u.com 2023-06-02 09:28:38 more
  • STM32-RTC

    RTC簡介: RTC是一個獨立的定時器,它可以連續計數和提供了時鐘日歷功能。使用BKP暫存器存盤具有掉電保存功能 存粹的計時的, 觸發中斷 ——鬧鐘中斷,用來產生一個可編程的鬧鐘中斷。 ——秒中斷,用來產生一個可編程的周期性中斷信號(最快1秒,最慢1秒,只能1秒) ——溢位中斷,指示內部可編程計數器 ......

    uj5u.com 2023-06-01 10:46:13 more
  • STM32-RTC

    RTC簡介: RTC是一個獨立的定時器,它可以連續計數和提供了時鐘日歷功能。使用BKP暫存器存盤具有掉電保存功能 存粹的計時的, 觸發中斷 ——鬧鐘中斷,用來產生一個可編程的鬧鐘中斷。 ——秒中斷,用來產生一個可編程的周期性中斷信號(最快1秒,最慢1秒,只能1秒) ——溢位中斷,指示內部可編程計數器 ......

    uj5u.com 2023-06-01 10:26:30 more
  • kali-linux運行python腳本時出現”word unexpected (expecting "

    # 前言 在剛剛開始學習網路安全時候,裝好了kali準備測驗一下。 運行了py結尾的腳本出現了以下錯誤: ![](https://img2023.cnblogs.com/blog/2572943/202305/2572943-20230531000850176-695077837.png) #解決方 ......

    uj5u.com 2023-05-31 07:28:15 more
  • Linux作業原理2常用基本命令和目錄層次結構

    本章是對本書中你將遇到的Unix命令和工具的指南。 為什么是Unix命令?這不是一本關于Linux如何作業的書嗎?當然是的,但Linux在本質上是一種Unix風格。在本章中,你會看到Unix這個詞,而不是Linux,因為你可以把你學到的東西直接帶到BSD和其他Unix風味的系統中去。我試圖避免涉及太 ......

    uj5u.com 2023-05-29 10:30:37 more
  • linux服務器,nginx日志切割保存

    我們都知道,默認情況下,nginx的專案log是一直被累計寫入的,隨著時間越久,那么這個檔案就會越大,這個時候如果我們要去做一些查找和排查就會比較困難,因為日志檔案太大,操作起來比較費勁。 因此我們為了規避這個問題,提出日志切割的方案。 那日志切割的原理是怎么樣的,我們來分析一下,我們先統計下連續1 ......

    uj5u.com 2023-05-26 15:30:38 more
  • 深度決議 slab 記憶體池回收記憶體以及銷毀全流程

    在上篇文章 [《深入理解 slab cache 記憶體分配全鏈路實作》](https://mp.weixin.qq.com/s?__biz=Mzg2MzU3Mjc3Ng==&mid=2247488152&idx=1&sn=7c65f8ee28e9cc14a86e9df92b6d2b93&chksm=c ......

    uj5u.com 2023-05-26 15:29:05 more
  • linux服務器,nginx日志切割保存

    我們都知道,默認情況下,nginx的專案log是一直被累計寫入的,隨著時間越久,那么這個檔案就會越大,這個時候如果我們要去做一些查找和排查就會比較困難,因為日志檔案太大,操作起來比較費勁。 因此我們為了規避這個問題,提出日志切割的方案。 那日志切割的原理是怎么樣的,我們來分析一下,我們先統計下連續1 ......

    uj5u.com 2023-05-26 15:26:14 more
  • 深度決議 slab 記憶體池回收記憶體以及銷毀全流程

    在上篇文章 [《深入理解 slab cache 記憶體分配全鏈路實作》](https://mp.weixin.qq.com/s?__biz=Mzg2MzU3Mjc3Ng==&mid=2247488152&idx=1&sn=7c65f8ee28e9cc14a86e9df92b6d2b93&chksm=c ......

    uj5u.com 2023-05-26 15:25:12 more
  • 容器編排器們的自我介紹

    哈嘍大家好,我是咸魚 咸魚在《[一文帶你了解容器技術的前世今生](https://mp.weixin.qq.com/s?__biz=MzkzNzI1MzE2Mw==&mid=2247484578&idx=1&sn=a8ae0d1c470351a8bbcb6891bae0ca23&chksm=c293 ......

    uj5u.com 2023-05-25 11:13:55 more