linux 内核探测kprobe 初步了解
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還不了解;先初步了解一下;
?
總結
以上是生活随笔為你收集整理的linux 内核探测kprobe 初步了解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 静态网页制作html语言入门
- 下一篇: 数据库基本概念 - 表、字段、sql语句