gdbでカーネル内部を探検する

Submitted by Hiroshi Miura on 土曜, 2007-01-13 16:58

カーネル内部をのぞくにはルート権限が必要。
また、ソースコードも準備しておこう。distributionによっては、標準でデバッグ用の無圧縮のvmlinuxが提供されていないこともある。その場合は、デバッグ用のパッケージがあるはずなので、それを導入。自前でコンパイルしたときは、コンパイルしたときのソースルートにあるはずです。

カーネル内部のメモリは、/proc/kcoreを使うと、gdbで扱えるcore形式で参照できる。raw形式であれば、/proc/kmemが使える。なお、/proc/kmemは、サーバの乗っ取りをするときに悪意のあるプログラムがrootkitで身を隠すためにも使われる。


# cd /usr/src/linux
# gdb -q /boot/vmlinux /proc/kcore

gdb> print jiffies
gdb> p jiffies #pはprintの省略形
gdb> info variables <正規表現>

gdb> print ((struct pid_hash)*pid_hash[0])->first
#構造体のcastや参照も使える。

さて、基本的にはそうだが、task構造体は、hashの先に、リストでつながっていて、dereferenceもしないといけないので、gdbでは容易ではない。

dump解析であれば、aliciaというツールを使うことで、この面倒をスクリプトでみてくれる。

ここでは、なんとかしてgdbと人力だけでやってみよう。

添付サイズ
Task_st.tar.gz13.91 KB

新しいコメントの投稿

  • Allowed HTML tags: <a> <p> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • 行と段落は自動的に分けます。

フォーマットのオプションに関する詳細情報

© 2010 Your Name. m