関数フック入れてのプロファイラ作成 (1)


前回の /Gh,/GH で関数にフックを入れられることがわかったので、これを利用して関数プロファイラを作成してみようと思います。

ただしここで1つ注意点があります。確かに呼ばれた関数のアドレスがわかりますが、そのアドレスがどの関数なのかを知る必要があります。アドレスから関数への対応を知るためには、いくつか方法があります。

  • mapファイルを参照する
  • pdbファイルを参照する

VCであればexeの生成時にmapファイルを作成することもできます。これをパースして対応表を作るのもあり、だと思います。でもせっかくVCなら、PDBファイル(Program Database File)を参照してデバッグ情報を得たいところです。
 このPDBですがファイルの仕様が全くわかりません。そのため何らかの方法経由で情報を取り出すことになります。調べてみると Dbghelp.dll が機能を持っているようです。詳しくは、デバッグテクニック徹底解説という黄色い本に書かれています。なにやら使うのが大変そう(にみえる)なので、別の方法でチャレンジしたいと思います。

調べてみると、DIAというDebug Interface Access という API が用意されています。これを用いるとpdbファイルから情報をいろいろと参照できるような感じです。今は Dia2となっているようですが、VisualStudioがインストールされている環境なら標準で使えるようにみえます。Dia が Debug Information API かと思ったら違う略だったので、危うく間違えて人に紹介するところでした・・・(汗

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする