/BASE (ベース アドレス)

プログラムのベース アドレスを指定します。

構文

/BASE:{address[,size] | @filename,key}

解説

Note

セキュリティ上の理由から、実行可能ファイルのベース アドレスを指定する代わりに、 /DYNAMICBASE オプションを使用することをお勧めします。 /DYNAMICBASE は、Windows のアドレス空間レイアウトランダム化 (ASLR) 機能を使用して、読み込み時にランダムにリベースできる実行可能イメージを生成します。 /DYNAMICBASE オプションは既定でオンになっています。

/BASE リンカー オプションは、プログラムのベース アドレスを設定します。 EXE または DLL ファイルの既定の場所をオーバーライドします。 EXE ファイルの既定のベース アドレスは、32 ビット イメージの場合は0x400000、64 ビット イメージの場合は0x140000000です。 DLL の場合、既定のベース アドレスは、32 ビット イメージの場合は 0x10000000、64 ビット イメージの場合は 0x180000000 になります。 アドレス空間レイアウトランダム化 (ASLR) をサポートしていないオペレーティング システム、または /DYNAMICBASE:NO オプションが設定されている場合、オペレーティング システムは最初に、指定されたベース アドレスまたは既定のベース アドレスでプログラムの読み込みを試みます。 空き領域が不足している場合、システムはプログラムを再配置します。 再配置を防ぐには、 /FIXED オプションを使用します。

addressが 64K の倍数でない場合、リンカーはエラーを発行します。 必要に応じて、プログラムのサイズを指定できます。 指定したサイズにプログラムが収まらない場合、リンカーは警告を発行します。

コマンド ラインでベース アドレスを指定するもう 1 つの方法は、 base アドレス応答ファイルを使用することです。 ベース アドレス応答ファイルは、プログラムが使用するすべての DLL のベース アドレスと省略可能なサイズ、および各ベース アドレスの一意のテキスト キーを含むテキスト ファイルです。 応答ファイルを使用してベース アドレスを指定するには、アット マーク (@) を使用し、応答ファイルの名前 filename、コンマ、ファイルで使用するベース アドレスの key 値を指定します。 リンカーは、LIB環境変数で指定されたディレクトリ内で、指定したパスまたはパスが指定されていない場合に、filenameを検索します。 filenameの各行は 1 つの DLL を表し、次の構文があります。

keyaddress [size] ; comment

keyは英数字の文字列であり、大文字と小文字は区別されません。 通常は DLL の名前ですが、必須ではありません。 keyの後に、C 言語、16 進数、または 10 進表記の基本addressと、オプションの最大sizeが続きます。 3 つの引数はすべて、スペースまたはタブで区切ります。 指定した size がプログラムに必要な仮想アドレス空間より小さい場合、リンカーは警告を発行します。 commentはセミコロン (;) で指定され、同じ行または別の行に置くことができます。 リンカーでは、セミコロンから行末までのすべてのテキストが無視されます。 次の例は、このようなファイルの一部を示しています。

main   0x00010000    0x08000000    ; for PROJECT.exe
one    0x28000000    0x00100000    ; for DLLONE.DLL
two    0x28100000    0x00300000    ; for DLLTWO.DLL

これらの行を含むファイルの名前が DLLS.txt である場合、次のコマンド例ではこの情報が適用されます。

link dlltwo.obj /dll /base:@dlls.txt,two

ベース アドレスを設定するもう 1 つの方法は、NAMEまたは LIBRARY ステートメントで BASE 引数を使用することです。 /BASEオプションと/DLL オプションは、LIBRARY ステートメントと同じです。

Visual Studio 開発環境でこのリンカー オプションを設定するには

  1. プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。 詳細については、Visual Studio での C++ コンパイラとビルド プロパティの設定に関する記事を参照してください。

  2. [構成プロパティ]>[リンカー]>[詳細] プロパティ ページを選択します。

  3. [ベース アドレス] プロパティを変更します。

このリンカーをコードから設定するには

関連項目

MSVC リンカーのリファレンス
MSVC リンカー オプション