1

これは Win32 関連の問題で、すべてのコードがネイティブです。

相互に依存する dll ライブラリとしてコンパイルされた 3 つのレイヤーがあります。

[Module 1] -> [Module 2] -> [Module 3] -> [My Module 4]

モジュール 1 はモジュール 2 をロードするアプリです。モジュール 2 はモジュール 3 をロードします。モジュール 3 は My Module 4 をロードします。

モジュール 1 から呼び出しが行われるたびに、モジュール 4 までのすべてのレイヤーを通過します。

モジュール 4 では、モジュール 1 のモジュール 2 からモジュール 3 によって呼び出されたことを、たとえば、それぞれの HMOUDLE ハンドルまたはそれらを一意に識別するその他のものを取得することによって、何らかの方法でトレースしたいと思います。このようなトレースを実行できる Win32 API は思いつきません。アドバイスいただけますか?

4

2 に答える 2

3

対象のSTACKFRAME64構造からの関連するアドレスでSymFromAddrと共にStackWalk64を使用できるはずです。あなたが望むものではありませんが、近づくための他の方法は考えられません。

于 2012-05-04T20:02:56.467 に答える
2

短い答え-一種ですが、おそらくこれをやりたくないでしょう:)

長い答え - Debug Help Libraryを使用して、(StackWalk64 経由で) スタック トレースを生成できます。これは、PSAPI経由で取得したモジュール情報と組み合わせて使用​​して、必要なものを取得できます。

基本的なアプローチは、プロセス内の各モジュールのベース アドレスとサイズを取得し、範囲ごとに一致する各スタック フレームのリターン アドレスを確認することです。モジュール 4 の関数への呼び出しがモジュール 1 内から発生したかどうかを判断するだけであれば、目的の場所に到達できます。

編集:問題のモジュールへのシンボルにアクセスできる場合、Steve Tの答えはもう少し堅牢です。

于 2012-05-04T20:03:17.097 に答える