もきもき3D

アクセスカウンタ

zoom RSS GDBでのDLLのデバッグ方法がわかんねぇ('A`)

<<   作成日時 : 2008/07/15 01:49   >>

ブログ気持玉 0 / トラックバック 0 / コメント 0

 symbol無しのexeから呼ばれるsymbol付きのDLL。
 且つ致命的なエラーを持たないDLL('A`)
 メモリ破壊の類があればトラップされて其処から入れるのは判ってるけど、そうでない場合どうやってGDBで介入するのかが全然わかんねぇ('A`)

 cmd> GDB foo.exe
 (gdb) dll-symbol bar.dll として、

 (gdb) list でbar.dlのソースを出せる状態にして

 (gdb) break num や
 (gdb) break func としても受け付けない('A`)
 (gdb) break bar.dll:xxxとしてもNG('A`)

 bar.dll内でraise(SIGINT)+signal()してみてもGDBが拾ってくれる気配は無い('A`)

 どうすれバインダーヽ(;`д´)ノ

 ググっても古いマニュアル翻訳のコピーばかりで役立つものがない('A`)ウゥ

----
 Ahhhh! 基本的に上記手順で問題ないっぽい。
 breakを受けなかったのはbar.dllを構成するソースが複数の為、src1.cのつもりで行番号指定→初期参照対象はsrc0.cで該当行が無い、というオチだったぽい('A`;;
 ちゃんと (gdb) list src1.c:0 として目的のソースに変えてからbreak指定したら受け付けた( ´∀`)

 後はちゃんと止まるか見るだけ。
 止まったら、本来の目的に取り掛かれるけど、何をしようとしてGDB弄り始めたのか忘れてる(((;;゚д゚)))
----
 甘かったorz
 ブレークポイントに対してCannot access memory at addressが出やがる('A`)ウゥ
----
メモ:
 LWプラグインの拡張子は*.pだけど、そのままではGDBは受け付けないっぽい。
 なので、*.dllのままにしておく必要がある。
 LW自体は*.dllでもプラグインとして呼び出せる。 extコンフィグ内の〜.pを〜.dllに書き換えても動く。
 *.dllに対してAddPlugin出来るかは謎。

 なんにしても、プラグイン内で止める方法がわかんねぇ('A`)
----
 cmd> gdb
 (gdb) dll-symbol 〜.dll
 外部でLW起動(*1)
 (gdb) break 〜
 (gdb) attach PID

 とすると、一応拾えるけど、得られる情報は不正&何度かstep/nextしてるとSIGSEGVが出てLWが落ちる。
 (*1)ではプラグインを起動させておく。 起動していないままattachしても拾えない。
 LW起動より先にbreak設定しておくとCannnot access〜が出る。

 う〜ん('A`)

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
GDBでのDLLのデバッグ方法がわかんねぇ('A`) もきもき3D/BIGLOBEウェブリブログ
文字サイズ:       閉じる