0

.pdb と DIA SDK を使用して、.exe の静的コールグラフを特定しようとしています。残念ながら、インクリメンタル リンクの場合、dia2dump サンプルを使用すると、関数によって呼び出されるインクリメンタル トランポリン サンクが表示されません。

デバッグとインクリメンタル リンクをオンにしてdia2dumpサンプル (またはここの単純なサンプル)を実行してリンクすると、どの関数のシンボル ダンプにも呼び出しが表示されませんwprintfprintfただし、インクリメンタル リンクを無効にすると、無効になります。

DIA を介して関数で使用されるインクリメンタル トランポリンを取得する方法はありますか? または、代わりに .obj および .lib ファイルをクラックする必要がありますか?

4

1 に答える 1

1

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

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

動的 CRT では、間接 (インポートを呼び出す) および ILT (間接を呼び出す; あなたの「トランポリン」と私は信じています) バージョンの printf 関数などはまだインクリメンタル .exe に存在しますが、それらへのコード参照はありません。

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

0x00011799 (PublicSymbol) @ILT+1940(_printf)
于 2011-08-04T07:30:22.897 に答える