linux 核心探測kprobe 初步了解

2021-10-16 05:23:10 字數 1392 閱讀 6182

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

核心自動探測中斷號

我們來看short kernelprobe函式如何實現由核心自動探測中斷號的 cpp view plain copy 466void short kernelprobe void 467 484 485 if more than one line has been activated,the res...

核心探測工具systemtap簡介

systemtap是核心開發者必須要掌握的乙個工具,本文我將簡單介紹一下此工具,後續將會有系列文章介紹systemtap的用法。假如現在有這麼乙個需求 需要獲取正在執行的 linux 系統的資訊,如我想知道系統什麼時候發生系統呼叫,發生的是什麼系統呼叫等這些資訊,有什麼解決方案呢?下面將會介紹sys...

核心探測工具systemtap簡介

systemtap是核心開發者必須要掌握的乙個工具,本文我將簡單介紹一下此工具,後續將會有系列文章介紹systemtap的用法。假如現在有這麼乙個需求 需要獲取正在執行的 linux 系統的資訊,如我想知道系統什麼時候發生系統呼叫,發生的是什麼系統呼叫等這些資訊,有什麼解決方案呢?下面將會介紹sys...