home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

技術/BSD/FreeBSDでKernel Loadable Moduleをデバッグするメモ(1)

技術/BSD/FreeBSDでKernel Loadable Moduleをデバッグするメモ(1)

技術 / BSD / FreeBSDでKernel Loadable Moduleをデバッグするメモ(1)
id: 892 所有者: msakamoto-sf    作成日: 2011-01-07 21:57:56
カテゴリ: BSD 

とりあえず下記handbookの内容を抄訳メモ。

他、"FreeBSD loadable module debug"などでググる。

で、上の内容なんだけど www."es".freebsd.org で見つかって、www.freebsd.orgの方には無い(2011-01-07時点)。
なんで、ちょっと不安。

あとあくまでもざっくり意訳したメモ書きで、実際に試してはいません。


1. デバッグ情報付きでモジュールをコンパイル

例としてlinux.ko:

# cd /sys/modules/linux
# make clean; make COPTS=-g

2. モジュールがロードされたアドレスを見つける

リモートからGDBでデバッグしてる(オンライン)場合:デバッグ機でkldstatすればLinker File= .koファイルがロードされたアドレスが分かる。
例:

# kldstat
Id Refs Address    Size     Name
 1    4 0xc0100000 1c1678   kernel
 2    1 0xc0a9e000 6000     linprocfs.ko
 3    1 0xc0ad7000 2000     warp_saver.ko
 4    1 0xc0adc000 11000    linux.ko

→ 0xc0adc000 に linux.ko がロードされてる。

crashダンプをkgdbなどでデバッグしてる(オフライン)場合:linker_files->tqh_first を起点として link.tqe_next を辿り、 filename が対象のlinker file名になっているエントリを見つける。見つかったら、 address メンバが linker file がロードされたアドレスを示している。

オンライン/オフラインそれぞれの場合でlinker fileがロードされたアドレスを見つけたら、その中に含まれている実行コードのアドレス(=linker file中でのオフセット)を調べる。

# objdump --section-headers /sys/modules/linux/linux.ko | grep text
  3 .rel.text     000016e0  000038e0  000038e0  000038e0  2**2
 10 .text         00007f34  000062d0  000062d0  000062d0  2**2
                                                ^^^^^^^^ これがオフセット。

というわけで、この例なら

0xc0adc000 = linux.ko = linker fileがロードされたアドレス
+
0x000062d0 = linker file中の".text"のオフセット = 実行コードのオフセット
=
0xc0ae22d0 = 再配置後のメモリ上の実行コードのアドレス

3. GDB(kgdb)にシンボルをロードする

add-symbol-file コマンドでシンボルをロードする。
今回の例:

(kgdb) add-symbol-file /sys/modules/linux/linux.ko 0xc0ae22d0
add symbol table from file "/sys/modules/linux/linux.ko" at text_addr = 0xc0ae22d0?
(y or n) y
Reading symbols from /sys/modules/linux/linux.ko...done.
(kgdb)

以上。



プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2011-01-07 22:00:11
md5:4b17a33127c2c90cc90afa5998e5bc0f
sha1:d1a96987ca66c47d1734cc9609bd8b0edf22bd18
コメント
コメントを投稿するにはログインして下さい。