前回の /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 かと思ったら違う略だったので、危うく間違えて人に紹介するところでした・・・(汗
コメント