SystemTap----利用stap命令來查找內核函數定義

   我們知道stap命令的-l(或-L)選項可以列出指定的某個probe描述中所有符合的probe點的列表,例如可以使用下面的命令,看到所有可以probe的函數:
stap -l 'kernel.function("*")'
今天在看書的時候,突然想到可以利用這個選項來找到一些內核函數的定義,例如sys_open()的定義。不管是source insight還是vim+ctag+cscope+taglist這樣的組合看代碼時,如果要想找到某個系統調用的定義,都需要在工程裏搜索,因爲這些系統調用在定義的時候都是用SYSCALL_DEFINE0、SYSCALL_DEFINE1等這樣的宏來定義的,這些工具都沒法直接找到其準確定義的位置。但是現在我們可以利用stap命令的-l選項,先準確地找到其具體的位置,然後精確地去某個文件的某一行就可以找到,非常快捷方便。下面就以sys_open()爲例來演示這個過程。
1、找到具體的位置
命令和輸出如下:
[root@CentOS____190 ~]# stap -l 'kernel.function("sys_open")'
kernel.function(sys_open@fs/open.c:913)
2、找到定義的位置
如下所示:

上面的步驟只是一個思路,如果想進一步簡化的話,可以直接寫一個腳本,每次只需要輸入要查找的函數名稱就行了,避免做重複的勞動。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章