Share via


/BASE (基底位址)

指定程式的基底位址。

語法

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

備註

注意

基於安全性考慮,Microsoft 建議您使用 /DYNAMICBASE 選項,而不是指定可執行檔的基底位址。 /DYNAMICBASE 使用 Windows 的位址空間配置隨機化 (ASLR) 功能,產生可在載入時間隨機重設基底的可執行檔映射。 選項 /DYNAMICBASE 預設為開啟。

連結 /BASE 器選項會設定程式的基底位址。 它會覆寫 EXE 或 DLL 檔案的預設位置。 EXE 檔案的預設基底位址是 32 位映射的預設基底位址0x400000,或 64 位映射的預設0x140000000。 針對 DLL,32 位映射的預設基底位址會0x10000000,或 64 位映射的預設基底位址0x180000000。 在不支援位址空間配置隨機化的作業系統上,或設定選項時 /DYNAMICBASE:NO ,作業系統會先嘗試在其指定的或預設基底位址載入程式。 如果空間不足,系統就會重新放置程式。 若要防止重新配置,請使用 /FIXED 選項。

如果 address 不是 64K 的倍數,連結器就會發出錯誤。 您可以選擇性地指定程式的大小。 如果程式無法符合您指定的大小,連結器就會發出警告。

在命令列上,指定基底位址的另一 種方式是使用基底位址回應檔 。 基底位址回應檔是文字檔,其中包含程式使用之所有 DLL 的基底位址和選擇性大小,以及每個基底位址的唯一文字索引鍵。 若要使用回應檔指定基底位址,請使用符號 ( @ ) 後面接著回應檔的名稱, filename 後面接著逗號,然後 key 是檔案中要使用的基底位址值。 連結器會在指定的路徑中尋找 filename ,如果未指定路徑,請在環境變數中指定的 LIB 目錄中尋找 。 中的每個 filename 行都代表一個 DLL,而且具有下列語法:

keyaddress [size] ;comment

key是英數位元的字串,且不區分大小寫。 這通常是 DLL 的名稱,但並非必要。 key後面接著 C 語言、十六進位或十進位標記法的基底 address ,以及選擇性的最大值 size 。 這三個引數都是以空格或索引標籤分隔。 如果指定的 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

設定基底位址的另一種方式是在 或 LIBRARY 語句中使用 BASENAME 引數。 和 /BASE/DLL 選項一起相當於 LIBRARY 語句。

在 Visual Studio 開發環境中設定這個連結器選項

  1. 開啟專案的 [屬性頁] 對話方塊。 如需詳細資料,請參閱在 Visual Studio 中設定 C ++ 編譯器和組建屬性

  2. 選取 [組態屬性 > ] 連結器 > [ 進階 ] 屬性頁。

  3. 修改基底位址 屬性。

若要以程式設計方式設定這個連結器選項

另請參閱

MSVC 連結器參考
MSVC 連結器選項