3

静的リンクはオプションではありません。

DLL に依存する実行可能ファイルがあるとします。解決策の 1 つは、DLL を実行可能ファイルと同じフォルダーに入れることです。ここで、DLL に依存するプロセスに DLL を挿入する必要があるとしましょう。DLL が挿入されるため、依存する DLL をどこに配置すればよいでしょうか? 同じフォルダに?または、注入されたプロセスのディレクトリにありますか?

4

1 に答える 1

6

1 つまたは複数の他の DLL に依存する DLL は、特別なものではありません。単純な DLL でさえ、他の DLL に存在する Windows 共有コンポーネントに依存します。これらの「共有コンポーネント」の良い例はKernel32.dll、CRT DLL などですMSVCR80.DLL

Dependency Walkerを呼び出すことで、DLL または EXE が必要とする他の DLL を正確に見つけることができます。これを行うにはdepends.exe、Visual Studio コマンド プロンプトから実行し、目的の DLL を表示されるウィンドウにドラッグ アンド ドロップします。利用可能な依存関係ウォーカーがない場合は、上記のリンクからダウンロードできます。

DLL インジェクションについてはよくわかりませんが、(他の DLL) 依存関係をすべて DLL と同じフォルダー (これらの DLL をロードする EXE が存在するフォルダー) に配置すれば、通常は十分なはずです。

例:C:\test\foo.exeが必要な場合bar.dll( が標準の Windows 共有コンポーネントでないbaz.dllと仮定すると、 が必要になる)、 と の両方をに配置します。baz.dllbar.dllbaz.dllC:\test

同じ DLL の複数のバージョンがさまざまな場所に存在する可能性があり、MSDN にはダイナミック リンク ライブラリの検索順序に関する役立つ記事があるため、OS がロードする DLL を決定する方法にはさらに多くの方法があります。

于 2013-04-24T02:50:44.747 に答える