02
19

Who call me – kernel版

很感謝jserv兄的who call me,讓我學到不少東西,而在Linux 2.6 kernel,也有相似的技巧可用,搭配__builtin_return_address和kallsyms_lookup,我們可以做出一個簡單的kernel module who call me

查看kallsyms.c這個程式,會發現其實已經有不少現成的kernel API封裝好給你用了,我這邊範例用的就是sprint_symbol這個函式,簡單的範例如下所示

  1. static int __init charmodule_init(void) 
  2. { 
  3. char function[KSYM_SYMBOL_LEN];
  4.  
  5. unsigned long caller = (unsigned long) __builtin_return_address(0);
  6. sprint_symbol(function, caller);
  7.  
  8. dbg("I was called by %s\n",function);
  9. }

在charmodule_init的函式內我加入兩行程式,分別是取得builtin_return_address和使用sprint_symbol查尋那個函式呼叫我,所以只要簡單的兩行,我們就可以做到kernel module who call me

 

我想嘗試看看用這種技巧trace kernel memory leak,如果有什麼結果再貼上來

標籤: linux
評論: 0 | 引用: 0 | 閱讀: 6556
發表評論
暱 稱: 密 碼:
網 址: E - mail:
驗證碼: 驗證碼圖片 選 項:
頭 像:
內 容: