0

kernel32.dll にある「GetThreadContext」を使用するプロセス (C++/windows) をデバッグしています。
アドレスを取得できることに気付きました

unsigned long address = (unsigned long)(&GetThreadContext);

しかし、ロードされたモジュールのタブを見ると、kernel32.dll のシンボルがロードされていないことがわかりました。
VS2008 はどのようにして「GetThreadContext」のアドレスを知ったのですか?
また、PDB を持たずに自分でそれを行うにはどうすればよいでしょうか?
ありがとう :)

4

1 に答える 1

3

これは同じ理由で機能します

GetThreadContext(hThread, lpContext);

動作します。コードで使用される名前付き関数は、リンク時に解決する必要があります。そうしないと、リンクが失敗します。それらを使用してアドレスを取得する&か、電話をかけるかは問題ではありません。実行時に DLL がロードされ、関数名がプロセス内の特定のアドレスに解決されます。

PDB ファイルは、デバッグ中に拡張されたシンボリック情報を提供するためにのみ使用されます。通常、これらは実行時には使用されません。

[この質問について何かが欠けていると思わずにはいられません。これがあなたの問題でない場合は教えてください。]

于 2010-12-03T19:58:36.010 に答える