/BASE
(Endereço básico)
Especifica o endereço básico de um programa.
Sintaxe
/BASE:
{address
[,
size
] |@
filename
,
key
}
Comentários
Observação
Por motivos de segurança, a Microsoft recomenda que você use a opção /DYNAMICBASE
em vez de especificar endereços básicos para seus executáveis. /DYNAMICBASE
gera uma imagem executável que pode ser rebaseada aleatoriamente no momento do carregamento usando o recurso ASLR (address space layout randomization) do Windows. A opção /DYNAMICBASE
fica ativada por padrão.
A opção /BASE
do vinculador define um endereço básico do programa. Ela substitui o local padrão de um arquivo EXE ou DLL. O endereço básico padrão de um arquivo EXE é 0x400000 para imagens de 32 bits ou 0x140000000 para imagens de 64 bits. Para uma DLL, o endereço base padrão é 0x10000000 para imagens de 32 bits ou 0x180000000 para imagens de 64 bits. Em sistemas operacionais que não oferecem suporte à randomização de layout de espaço de endereço (ASLR) ou quando a opção /DYNAMICBASE:NO
for definida, o sistema operacional primeiro tenta carregar um programa em seu endereço base especificado ou padrão. Se o espaço disponível ali for insuficiente, o sistema realocará o programa. Para evitar a realocação, use a opção /FIXED
.
O vinculador emite um erro se address
não for um múltiplo de 64K. Como opção, você pode especificar o tamanho do programa. O vinculador emitirá um aviso se o programa não puder se ajustar ao tamanho especificado.
Na linha de comando, outra maneira de especificar o endereço básico é usando um arquivo de resposta de endereço base. Um arquivo de resposta de endereço básico é um arquivo de texto que contém os endereços básicos e tamanhos opcionais de todas as DLLs que seu programa usa e uma chave de texto exclusiva para cada endereço de base. Para especificar um endereço básico usando um arquivo de resposta, use um símbolo de arroba (@
) seguido pelo nome do arquivo de resposta, filename
, seguido por uma vírgula e, em seguida, o valor key
para o endereço básico a ser usado no arquivo. O vinculador procura por filename
no caminho especificado ou, se nenhum caminho for especificado, nos diretórios especificados na variável de ambiente LIB
. Cada linha em filename
representa uma DLL e tem a seguinte sintaxe:
key
address
[size
];
comment
key
é uma cadeia de caracteres alfanumérica e não diferencia maiúsculas de minúsculas. Geralmente é o nome de uma DLL, mas isso não é necessário. key
é seguido por uma base address
em linguagem C, notação hexadecimal ou decimal e um máximo opcional de size
. Todos os três argumentos são separados por espaços ou tabulações. O vinculador emite um aviso se o size
especificado for menor que o espaço de endereço virtual exigido pelo programa. Um comment
é especificado por um ponto e vírgula (;
) e pode estar na mesma linha ou em uma linha separada. O vinculador ignora todo o texto desde o ponto e vírgula até o final da linha. Este exemplo mostra parte de tal arquivo:
main 0x00010000 0x08000000 ; for PROJECT.exe
one 0x28000000 0x00100000 ; for DLLONE.DLL
two 0x28100000 0x00300000 ; for DLLTWO.DLL
Se o arquivo que contém essas linhas for chamado DLLS.txt, o comando de exemplo a seguir aplicará essas informações:
link dlltwo.obj /dll /base:@dlls.txt,two
Outra maneira de definir o endereço básico é usar o argumento BASE
em uma instrução NAME
ou LIBRARY
. As opções /BASE
e /DLL
juntas são equivalentes à instrução LIBRARY
.
Para definir esta opção do vinculador no ambiente de desenvolvimento do Visual Studio
Abra a caixa de diálogo Páginas de Propriedades do projeto. Para obter detalhes, confira Definir as propriedades de build e do compilador do C++ no Visual Studio.
Selecione a página de propriedades Propriedades da Configuração>Vinculador>Avançado.
Modifique a propriedade Endereço básico.
Para definir esta opção do vinculador por meio de programação
- Consulte BaseAddress.