2011-08-03 9 views
0

私は.pdbとDIA SDKを使用して、.exeの静的コールグラフを決定しようとしています。残念なことに、徐々にリンクするとき、関数によって呼び出されるインクリメンタルトランポリンサンクは、dia2dumpサンプルを使用しても表示されません。関数の.pdbからのインクリメンタルリンクのサンクを取得するには?

あなたが実行してデバッグやインクリメンタルリンクでdia2dumpサンプル(または単純な1 here)をリンクする場合はオンになって、任意の関数のシンボルダンプに表示されませんwprintfまたはprintfに呼び出します。ただし、増分リンクを無効にすると、増分リンクが無効になります。

DIAを通じて機能によって使用される増分トランポリンを得る方法はありますか?または、代わりに.objと.libファイルをクラックする必要がありますか?

答えて

1

どのようにCRTにリンクしていますか?静的または動的?

VS2010(ダイナミック/ dll CRTを使用)でサンプルをコンパイルし、結果の.exeをIDA Proにロードしました。例としてFatal関数を使用すると、そのすべてのprintf呼び出しは、その関数の.exeのインポートエントリの参照に直接コンパイルされます(つまり、__imp__printf)。だから、あなたがダンプに現れるのを見ていないのかもしれません。 CRTへのスタティック・リンク(インクリメンタル・オン)を使用すると、ILTが呼び出されます。インクリメンタルオフをオフにすると、printfが直接呼び出されます(インポートしていないので)

ダイナミックCRTでは、間接的インクリメンタルな.exeにはまだ存在しますが、コード参照はありません。

サンプルは実際にILT(以下のprintfの例)を正しくダンプするので、実際に呼び出されたときに関数シンボルダンプで正しくダンプすることができます。しかし、DIAに関する私の経験は限られています。だから私は多かれ少なかれ私のお尻から話しています。

0x00011799 (PublicSymbol) @ILT+1940(_printf) 
関連する問題