user32にブレークポイントを設定しようとしています!RegisterClipboardFormat明らかに、この関数はエクスポートされます(link / dump / exports-すぐそこにあります)。MicrosoftシンボルサーバーからPDBファイルをダウンロードする前に、次の機能を見つけることができます。
0:001> lm m user32
start end
76eb0000 76fcf000 USER32 (export symbols) c:\Windows\system32\USER32.dll
0:001> x user32!RegisterClipboardFormat*
76ec4eae USER32!RegisterClipboardFormatA (<no parameter info>)
76ec6ffa USER32!RegisterClipboardFormatW (<no parameter info>)
問題はありません。これらの関数のいずれかを「bu」することができます。しかし、Microsoft PDBサーバーからPDBシンボルをダウンロードすると、次のようになります。
0:001>
start end module name
76d50000 76e6f000 USER32 (pdb symbols) c:\symbols\user32.pdb\561A146545614951BDB6282F2E3522F72\user32.pdb
0:000> x user32!RegisterClipboardFormat
WinDBGはシンボルを見つけることができません。ただし、RegisterWindowMesssageを見つけることができます。
0:000> x user32!RegisterWindowMessage*
76d64eae USER32!RegisterWindowMessageA = <no type information>
76d66ffa USER32!RegisterWindowMessageW = <no type information>
関数のアドレスが同じであることに注意してください(これはWindows 8の場合です)。以前のバージョンについてはわかりません。これは、オプティマイザまたはDEFファイル(EXPORTセクションのfunc1 = func2)でおそらく達成されます。'link / dump / exports'は、RegisterWindowMessageとRegisterClipboardFormatが同じRVAを持っていることを示しています。
問題は、私がこれにあまりにも多くの時間を費やしたことです。だから私の質問は:
- WinDBG内から、欠落しているエイリアスエクスポートシンボルを見つける簡単な方法はありますか。
- RegisterClipboardFormatWでのみ中断したいとします。正しく思い出せば、どこかにJMP命令があるはずです(呼び出し側モジュールのインポートテーブル内)。そのシンボルを見つけるにはどうすればよいですか?すべての呼び出しモジュールでこのエントリを見つける方法はありますか?