3

私のプロジェクトでは、実行時にDLLをロードする必要があり、それ以前はDLLに関する情報がありません。LoadLibraryとGetProcAddressで呼び出される(装飾された)名前を持つ関数を列挙できる必要があります(これは私に課せられた要件です)。名前は装飾されている場合とされていない場合があり、GetProcAddressに装飾された名前がある場合は、明らかにその名前が必要です。

これを行うための合理的な方法はありますか?

Dependsやその他のツールを使用して、装飾された名前を自分で引き出すことができますが、これは実行時に行う必要があります。UnDecorateSymbolNameのような関数を使用すると、欠落している装飾された名前を取得する方法が必要になります。SymEnumSymbolsを試しましたが、名前が装飾されていませんでした。

関数の呼び出しについて質問しているのではなく、.DEFファイルなしでDLLから名前を列挙しているだけであることに注意してください。私はVisualStudio2010を使用しており、すべてのDLLがVisualStudioでコンパイルされると想定されています。

4

1 に答える 1

2

C ++を使用して実行時にDLL関数を列挙する場合は、Matt Pietrek(コードを含む)のPEDUMPを試してみてください。彼はこの機能を実装する方法を示しています。

出力のスナップショットの下に、DLLの装飾されたエクスポートされた関数を示します。

ここに画像の説明を入力してください

于 2012-07-31T05:38:50.610 に答える