/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:

keyaddress [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

  1. 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.

  2. Selecione a página de propriedades Propriedades da Configuração>Vinculador>Avançado.

  3. Modifique a propriedade Endereço básico.

Para definir esta opção do vinculador por meio de programação

Confira também

Referência de vinculador MSVC
Opções de vinculador MSVC