10

プレーンなWin32DLL/ Execを解析し、そこからすべてのインポートとエクスポートを取得して、コンソールまたはGUI(つまり、Winフォーム)に表示する必要があります。エクスポート/インポートテーブルを読み取ってC#.NETでWin32 DLL / Exeを解析し、そこからマネージタイプを取得することは可能ですか?アンマネージドPEであるため、.NETではアンマネージドPEファイルをマネージド.NETアセンブリに変換できず、COMマネージドアセンブリのみが生成されます。

これらのテーブルを解析し、そのすべてのメソッド(署名)を管理された形式で取得するにはどうすればよいですか。(たとえば、引数としてchar *の場合、IntPtrとして表示されます)。

4

3 に答える 3

4

.Net用のPeNetライブラリをご覧ください。DLLのすべてのエクスポート/インポートを解析して一覧表示できます。githubから、またはNuGetパッケージとして直接入手できます。https://github.com/secana/PeNet https://www.nuget.org/packages/PeNet/

(免責事項:私はプロジェクトの作者です)

于 2016-02-22T21:27:27.247 に答える
2

質問の2番目の部分であるメソッドシグネチャの取得に関しては、原則として、これは不可能です。その情報は通常、PE自体には保存されません。C ++関数の場合、マングルされた名前がその情報をエンコードするため、それが可能になる可能性がありますが、多くのDLLはC++インターフェイスを公開していません。COMインターフェイスの場合、この情報はタイプライブラリに格納され、多くの場合、PEにリソースとして埋め込まれます。念頭に置いている特定のdllでこれが可能かどうかを確認するには、dumpbinとundecを使用して、関数がC++のマングル名であるかどうかを確認します。そうでない場合は、適切なP / Invoke署名を作成するために、ヘッダーファイルなどの他の情報源が必要になります(この場合、おそらくPEファイルを解析する必要はありません)。

于 2010-05-23T15:10:33.393 に答える
2

PEファイルの解析は、Microsoft Portable ExecutableSpecificationDocumentを使用して可能です。ただし、Loganが指摘したように、署名はPEファイルに含まれていません。エクスポートされた関数の名前のみが含まれます。

更新:dllがMicrosoftのC++コンパイラの最新バージョンによって作成されたC++ dllである場合、次の関数を呼び出すことにより、マングルされた名前の装飾を解除してほとんどの署名を取得できます:Windows用デバッグツールのUnDecorateSymbolName。ただし、戻り値はマングルされた名前には含まれていません。

于 2010-05-24T02:38:47.427 に答える