/BASE
(Základní adresa)
Určuje základní adresu programu.
Syntaxe
/BASE:
{address
[,
size
] |@
filename
,
key
}
Poznámky
Poznámka:
Z bezpečnostních důvodů společnost Microsoft doporučuje použít /DYNAMICBASE
možnost místo zadávání základních adres pro vaše spustitelné soubory. /DYNAMICBASE
vygeneruje spustitelný obrázek, který lze náhodně znovu načíst pomocí funkce randomizace rozložení adresního prostoru (ASLR) systému Windows. Možnost /DYNAMICBASE
je ve výchozím nastavení zapnutá.
Možnost /BASE
linkeru nastaví základní adresu pro program. Přepíše výchozí umístění souboru EXE nebo DLL. Výchozí základní adresa souboru EXE je 0x400000 pro 32bitové image nebo 0x140000000 pro 64bitové obrázky. Pro knihovnu DLL je výchozí základní adresa 0x10000000 pro 32bitové image nebo 0x180000000 pro 64bitové image. V operačních systémech, které nepodporují randomizaci rozložení adresního prostoru (ASLR) nebo při /DYNAMICBASE:NO
nastavení možnosti se operační systém pokusí načíst program na zadanou nebo výchozí základní adresu. Pokud tam není dostatek místa, systém program přemístí. Pokud chcete zabránit přemístění, použijte tuto /FIXED
možnost.
Linker vydá chybu, pokud address
není násobkem 64 tisíc. Volitelně můžete zadat velikost programu. Linker vydá upozornění, pokud se program nevejde do zadané velikosti.
Na příkazovém řádku je dalším způsobem, jak zadat základní adresu, pomocí souboru odpovědi základní adresy. Soubor odpovědi základní adresy je textový soubor, který obsahuje základní adresy a volitelné velikosti všech knihoven DLL, které program používá, a jedinečný textový klíč pro každou základní adresu. Chcete-li zadat základní adresu pomocí souboru odpovědi, použijte znak at (@
) následovaný názvem souboru odpovědi, filename
následovaný čárkou a hodnotou key
základní adresy, která se má v souboru použít. Linker hledá filename
buď zadanou cestu, nebo pokud není zadána žádná cesta, v adresářích zadaných v LIB
proměnné prostředí. Každý řádek v filename
představuje jednu knihovnu DLL a má následující syntaxi:
key
address
[size
];
comment
Jedná se key
o řetězec alfanumerických znaků a nerozlišuje malá a velká písmena. Obvykle se jedná o název knihovny DLL, ale není to nutné. Následuje key
základ address
v jazyce C, šestnáctkové nebo desetinné notaci a volitelné maximum size
. Všechny tři argumenty jsou oddělené mezerami nebo tabulátory. Linker vydá upozornění, pokud je zadaný size
menší než virtuální adresní prostor vyžadovaný programem. A comment
je určen středníkem (;
) a může být na stejném nebo samostatném řádku. Linker ignoruje veškerý text ze středníku na konec řádku. Tento příklad ukazuje část takového souboru:
main 0x00010000 0x08000000 ; for PROJECT.exe
one 0x28000000 0x00100000 ; for DLLONE.DLL
two 0x28100000 0x00300000 ; for DLLTWO.DLL
Pokud se soubor, který obsahuje tyto řádky, nazývá DLLS.txt, použije následující ukázkový příkaz tyto informace:
link dlltwo.obj /dll /base:@dlls.txt,two
Dalším způsobem, jak nastavit základní adresu, je použití argumentu BASE
NAME
v příkazu nebo LIBRARY
příkazu. Možnosti /BASE
a /DLL
možnosti jsou společně ekvivalentní příkazu LIBRARY
.
Nastavení tohoto parametru linkeru ve vývojovém prostředí sady Visual Studio
Otevřete dialogové okno Stránky vlastností projektu. Podrobnosti najdete v tématu Nastavení kompilátoru C++ a vlastností sestavení v sadě Visual Studio.
Vyberte stránku vlastností linkeru>>Konfigurace Upřesňující vlastnost.
Upravte vlastnost Základní adresa.
Programové nastavení tohoto parametru linkeru
- Viz třída BaseAddress.