プロフィール

kosaki

Author:kosaki
連絡先はコチラ

ブログ検索
最近の記事
最近のコメント
最近のトラックバック
リンク
カテゴリー
月別アーカイブ
RSSフィード
FC2ブログランキング

スポンサーサイト このエントリーをはてなブックマークに追加

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


スポンサー広告 | 【--------(--) --:--:--】 | Trackback(-) | Comments(-)

crashのプラグインを書いてみた このエントリーをはてなブックマークに追加

linuxのカーネルダンプ解析に使うcrashというコマンドがある。
かなり強力なツールなのだがgdbと違ってマクロ機能はないっぽい
(あったら誰か教えて!)

で、仕事上、すごーーーく、長大なリスト構造をダンプ解析することになり、手動で調べるのを断念。プラグインを作ってみた
(crashのプラグラインがナニモノかはcrashコマンドプロンプトで crash> help extend と打てば分かるよん)

最初、かなり舐めてたのだが、結構苦労した。
完全ドキュメント0でつね。これ(´・ω・`)

以下、備忘録
・pluginのスケルトンはcrashに付属するecho.c から拝借すると良い
ポイントはいか
- defs.h のインクルードは必須(defs.hはcrashのソースに付属)
- struct command_table_entry の配列を定義する事により、コマンド定義される
- _init(), _fini()はだまってコピー&ペーストするように。 extend echo.so で_init()が呼ばれ、extend -u echo.soで_fini()が呼ばれる
- コマンド引数はグローバル変数 argcnt, args に保存されている
・よく使うコマンドは以下

- fprintf(fp, "") 
crash端末への出力はグローバル変数fp(この名前は決めうち)にfprintfする
- symbol_value("シンボル")
文字列で与えられたシンボル(グローバル変数名または関数名)からアドレスを返す
- readmem(addr, addr_type, buf, size, "エラー文字列", エラー処理タイプ);
アドレスをあたえて、そのアドレスの値を読む。
典型的にはsymbol_value()の復帰値を与える
addr readするアドレス
addr_type
UVADDR:    ユーザ空間仮想アドレス
KVADDR:    カーネル空間仮想アドレス(普通は常にこれで十分)
PHYSADDR:   物理アドレス
XENMACHADDR: XENでのマシンアドレス
buf 結果格納バッファ
size readサイズ
エラー文字列:    addrが不正などでエラー発生時にこの文字列が表示される
エラー処理タイプ
FAULT_ON_ERROR: 異常時にcrash>プロンプトに強制復帰
(常にこれで実用上は十分)
QUIET|FAULT_ON_ERROR:  上と同じだが、メッセージが出ない(らしい)
RETURN_ON_ERROR:    異常時に関数が0を返す(成功時は1)
QUIET|RETURN_ON_ERROR: 上と同じだが、メッセージが出ない(らしい)  
- STRUCT_SIZE("構造体名")
構造体名から構造体のサイズを得る。配列を処理するときに使う
- MEMBER_OFFSET("構造体名", "メンバ名");
構造体中のメンバの構造体先頭アドレスからのオフセットを得る



関連記事


linux | 【2007-08-05(Sun) 14:32:52】 | Trackback:(0) | Comments:(4)
コメント

>かなり強力なツールなのだがgdbと違ってマクロ機能はないっぽい
>(あったら誰か教えて!)

えっ! そんなはずは…。普通にsourceで読み込めるはず。
むかーーし使った覚えがあるなあ。

マクロだとスピード遅いので、Cのモジュールが作れるのなら、
そのほうが早いけど。
2007-08-06 月 06:13:12 | URL | ygoto #- [ 編集]

げふんげふん。
いきなり間違いを晒してしまったわ。

ご指摘感謝!
あとでやってみる。
2007-08-06 月 21:13:21 | URL | kosaki #- [ 編集]
このコメントは管理人のみ閲覧できます
2007-10-07 日 01:33:12 | | # [ 編集]
このコメントは管理人のみ閲覧できます
2007-12-15 土 14:58:16 | | # [ 編集]
  1. 無料アクセス解析
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。