静的リンクはオプションではありません。
DLL に依存する実行可能ファイルがあるとします。解決策の 1 つは、DLL を実行可能ファイルと同じフォルダーに入れることです。ここで、DLL に依存するプロセスに DLL を挿入する必要があるとしましょう。DLL が挿入されるため、依存する DLL をどこに配置すればよいでしょうか? 同じフォルダに?または、注入されたプロセスのディレクトリにありますか?
静的リンクはオプションではありません。
DLL に依存する実行可能ファイルがあるとします。解決策の 1 つは、DLL を実行可能ファイルと同じフォルダーに入れることです。ここで、DLL に依存するプロセスに DLL を挿入する必要があるとしましょう。DLL が挿入されるため、依存する DLL をどこに配置すればよいでしょうか? 同じフォルダに?または、注入されたプロセスのディレクトリにありますか?
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.dll
bar.dll
baz.dll
C:\test
同じ DLL の複数のバージョンがさまざまな場所に存在する可能性があり、MSDN にはダイナミック リンク ライブラリの検索順序に関する役立つ記事があるため、OS がロードする DLL を決定する方法にはさらに多くの方法があります。