/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 を表し、次の構文があります。
key
address
[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 開発環境でこのリンカー オプションを設定するには
プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。 詳細については、Visual Studio での C++ コンパイラとビルド プロパティの設定に関する記事を参照してください。
[構成プロパティ]>[リンカー]>[詳細] プロパティ ページを選択します。
[ベース アドレス] プロパティを変更します。
このリンカーをコードから設定するには
- 以下を参照してください。BaseAddress