systemtapのスクリプトでカーネル関数を呼ぶのはどうやんだっけ?というところのメモです。
c言語の関数を作って、それを呼び出す形で実装しました。systemtapのマニュアル 3 Components of a SystemTap scriptの3.5~3.7にcの関数を組み込む方法の説明があります。
で、とりあえず作ったのがこちら。
#!/usr/bin/env stap %{ #include <linux/sched.h> #include <linux/thread_info.h> %} function show_limit:long() %{ STAP_PRINTF("limit -> 0x%lx\n", current_thread_info()->addr_limit.seg); STAP_RETURN(0); %} probe kernel.function("_do_fork") { show_limit() exit() } probe end { printf("Done\n") }
やってるのは_do_fork()が呼ばれたときにshow_limit()を呼んで、current_thread_info()->addr_limit.segの結果を表示させてます。表示先はsyslogではなくてターミナルです(STAP_PRINTFを使っているので)。
これを普通に実行すると怒られます。
masami@saga:~$ sudo stap mm_limit.stp parse error: embedded code in unprivileged script; need stap -g saw: embedded-code at mm_limit.stp:3:1 source: ... #include <linux/sched.h> #include <linux/thread_info.h> ... %{ ^ 2 parse errors. Pass 1: parse failed. [man error::pass1] Number of similar error messages suppressed: 1. Rerun with -v to see them.
なので-gオプションをつけます。
masami@saga:~$ sudo stap mm_limit.stp -g limit -> 0x7ffffffff000 Done
Webサービス開発徹底攻略 Vol.2 (WEB+DB PRESS plus)
- 作者: 鶴原翔夢,小野侑一,中村俊介,佐藤春旗,青山公士,佐々木大輔,横路隆,加来純一,山本伶,大平武志,米川健一,坂本登史文,若原祥正,和久田龍,平栗遵宜,城倉和孝,安達俊雄,Akira,川嶋賢一,安詮院康広,山口良平,尾上忠輔,大川高志,坂本寛樹,栗林健太郎,柴田博志,黒田良,常松伸哉,安宅啓,舘野祐一,WEB+DB PRESS編集部
- 出版社/メーカー: 技術評論社
- 発売日: 2016/02/16
- メディア: 大型本
- この商品を含むブログを見る