Win32デバッグ(3)・・・デバッグ情報
前回までで、Win32のデバッグAPIなどを見てきて、GetThreadContextやWriteProcessMemory関数を使えば、スレッドのコンテキストやプロセスのアドレス空間のメモリを書き換えることができることなどと書いたが、デバッガやプロファイラなどの実用的なソフトウェアを作成するにはこれだけではまだ不十分なのである。
ということで、今回はそのような実用的なソフトウェアを作成するために必要となるであろうデバッグ情報について。
デバッグ情報とは、コンパイラやリンカによって生成される実行可能モジュールなどをデバッグするために必要な情報(そのまんまじゃん・・
)、例えば、ソースファイル内で定義した関数なら、実行可能モジュールを実行すると、ローダーと呼ばれるOSのコンポーネントによって、実行可能モジュールのイメージがプロセスのアドレス空間にロードされ、実行が開始されるが、ロード後のプロセスのアドレス空間における関数のコードの開始と終了位置のアドレスを求めるために必要な情報などそのような類似の情報の総称の事である。
生成されるデバッグ情報の詳細レベルは使用しているコンパイラやリンカの種類やまたそれらのオプションスイッチによって変わるが、まぁ、ソースファイル内の行からロード後のアドレスを求めるための行レベルの情報など程度の差こそあれ基本的に似たような情報が格納されているのでここでは問題にしない。
また、デバッグ情報はその情報がシンボルとして格納されているのが一般的なのでシンボリックデバッグ情報とも呼ばれる。シンボルには、宣言した変数や関数などのソースファイル内に現われる具体的なシンボルの他にもソースコードをコンパイル・リンクしたコンパイラやリンカの情報を表すシンボルなどもあり、これも使用しているコンパイラやリンカによって異なるでここでは問題にしない。
Microsoftの統合開発環境Visual Studioを使ってる場合、基本的にそのような情報は拡張子PDBのプログラムデータベースファイル(Program Database File)と呼ばれるファイルに格納され、自分が使ってるBorland/CodeGearの統合開発環境だとorz・・・・
と今回はこれぐらいにするが、ちょっと抽象的な説明ばかりなので、次回以降に具体的にデバッグ情報というものの中身を簡単に覗いてみようかなと・・
最後に、前2回、えらく、長くなってしまったが、ココログにホームページを作成する機能があるっぽさそうなので、ホームページとして作成すれば良かったのかも
。まず、このブログの幅
が狭いので広げたいのであるが・・・とりあえず、このネタはブログの記事として終わらせるとして、今度使ってみよう
。
| 固定リンク
「Windows」カテゴリの記事
- Win32デバッグ(12)・・・SEH(Structured Exception Handling)(2009.10.07)
- Win32デバッグ(11)・・・番外編(2009.10.06)
- Win32デバッグ(10)・・・泣(2009.09.30)
- 間隔(インターバル)型の続き(2009.08.23)
- Win32デバッグ(9)・・・逆アセンブラ(2009.08.15)
「デバッグ」カテゴリの記事
- Win32デバッグ(12)・・・SEH(Structured Exception Handling)(2009.10.07)
- Win32デバッグ(11)・・・番外編(2009.10.06)
- Win32デバッグ(10)・・・泣(2009.09.30)
- Win32デバッグ(9)・・・逆アセンブラ(2009.08.15)
- Win32デバッグ(8)・・・そして(2009.08.14)

コメント