/DEPENDENTLOADFLAG (既定の依存ロード フラグの設定)
/DEPENDENTLOADFLAG オプションには、Visual Studio 2017 以降が必要です。
オペレーティング システムがモジュールの静的にリンクされたインポートを解決するときに使う、既定のロード フラグを設定します。
構文
/DEPENDENTLOADFLAG[:<ロード フラグ>]
引数
<ロード フラグ>
モジュールの静的にリンクされたインポートの依存関係を解決するときに適用するロード フラグを指定する、省略可能な整数値。 既定値は0です。 サポートされているフラグ値の一覧については、LoadLibraryEx に関する記事の LOAD_LIBRARY_SEARCH_*
エントリを参照してください。
解説
オペレーティング システムでは、モジュールの静的にリンクされたインポートを解決するときに、既定の検索順序が使用されます。 /DEPENDENTLOADFLAG を使って、これらのインポートの解決に使われる検索パスを変更する <ロード フラグ> 値を指定できます。 サポートされているオペレーティング システムでは、静的インポート解決の検索順序が変更されます (LOAD_LIBRARY_SEARCH
パラメーターを使用する場合の LoadLibraryEx の動作と同様です)。 <ロード フラグ> によって設定される検索順序の詳細については、「LOAD_LIBRARY_SEARCH フラグを使用した検索順序」を参照してください。
このフラグを使うと、1 つの DLL の植え付け攻撃ベクトルをより困難にできます。 たとえば、DLL を静的にリンクしたアプリを考えてみます。
攻撃者は、インポート解決の検索パスの初めに、同じ名前の DLL を植え付ける可能性があります (アプリケーション ディレクトリなど)。 保護されたディレクトリは、攻撃者による変更がより困難になります (ただし、不可能ではありません)。
DLL がアプリケーション、%windows%\system32、%windows% の各ディレクトリに見つからない場合、インポートの解決は現在のディレクトリにフォール スルーされます。 攻撃者がそこに DLL を植え付ける可能性があります。
どちらの場合も、リンク オプション /DEPENDENTLOADFLAG:0x800
(フラグ LOAD_LIBRARY_SEARCH_SYSTEM32
の値) を指定すると、モジュール検索パスは %windows%\system32 ディレクトリに制限されます。 これにより、他のディレクトリに対する植え付け攻撃からある程度保護できます。 詳細については、「ダイナミック リンク ライブラリのセキュリティ」を参照してください。
任意の DLL で /DEPENDENTLOADFLAG オプションによって設定された値を表示するには、DUMPBIN コマンドを /LOADCONFIG オプションと共に使用します。
/DEPENDENTLOADFLAG オプションは、Visual Studio 2017 の新機能です。 これは、Windows 10 RS1 以降の Windows バージョンで実行されるアプリにのみ適用されます。 このオプションは、アプリを実行するその他のオペレーティング システムでは無視されます。
Visual Studio 開発環境で DEPENDENTLOADFLAG リンカー オプションを設定するには
プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。 詳細については、Visual Studio での C++ コンパイラとビルド プロパティの設定に関する記事を参照してください。
[構成プロパティ]>[リンカー]>[コマンド ライン] プロパティ ページを選択します。
[追加のオプション] にオプションを入力します。
このリンカーをコードから設定するには
- 以下を参照してください。AdditionalOptions