/BASE
(dirección base)
Especifica la dirección base para un programa.
Sintaxis
/BASE:
{address
[,
size
] |@
filename
,
key
}
Comentarios
Nota:
Por motivos de seguridad, Microsoft recomienda usar la opción /DYNAMICBASE
en lugar de especificar direcciones base para los ejecutables. /DYNAMICBASE
genera una imagen ejecutable que se puede fusionar mediante cambio de base aleatoriamente en el momento de la carga mediante la característica de selección aleatoria del diseño del espacio de direcciones (ASLR) de Windows. La opción /DYNAMICBASE
está activada de forma predeterminada.
La opción de enlazador /BASE
establece una dirección base para el programa. Invalida la ubicación predeterminada de un archivo EXE o DLL. La dirección base predeterminada para un archivo EXE es 0x400000 para imágenes de 32 bits o 0x140000000 para imágenes de 64 bits. Para un archivo DLL, la dirección base predeterminada es 0x10000000 para imágenes de 32 bits o 0x180000000 para imágenes de 64 bits. En los sistemas operativos que no admiten la selección aleatoria del diseño del espacio de direcciones (ASLR), o cuando se estableció la opción /DYNAMICBASE:NO
, el sistema operativo primero intenta cargar un programa en su dirección base especificada o predeterminada. Si no hay suficiente espacio disponible allí, el sistema reubica el programa. Para evitar la reubicación, use la opción /FIXED
.
El enlazador emite un error si address
no es un múltiplo de 64 K. Opcionalmente, puede especificar el tamaño del programa. El enlazador emite una advertencia si el programa no se ajusta al tamaño especificado.
En la línea de comandos, otra manera de especificar la dirección base es mediante un archivo de respuesta de dirección base. Un archivo de respuesta de dirección base es un archivo de texto que contiene las direcciones base y tamaños opcionales de todos los archivos DLL que usa el programa y una clave de texto única para cada dirección base. Para especificar una dirección base mediante un archivo de respuesta, use un signo de arroba (@
) seguido del nombre del archivo de respuesta, filename
, seguido de una coma y, a continuación, el valor key
para la dirección base que se usará en el archivo. El enlazador busca filename
en la ruta de acceso especificada, o si no se especifica ninguna ruta de acceso, en los directorios especificados en la variable de entorno LIB
. Cada línea en filename
representa un archivo DLL y tiene la sintaxis siguiente:
key
address
[size
];
comment
El valor key
es una cadena de caracteres alfanuméricos y no distingue mayúsculas de minúsculas. Normalmente es el nombre de un archivo DLL, pero eso no es necesario. key
va seguido de una base address
en notación en lenguaje C, hexadecimal o decimal, y un size
máximo opcional. Los tres argumentos están separados por espacios o tabulaciones. El enlazador emite una advertencia si el size
especificado es menor que el espacio de direcciones virtual requerido por el programa. Un elemento comment
se especifica mediante un punto y coma (;
) y puede estar en la misma línea o en una línea independiente. El enlazador ignora todo el texto del punto y coma hasta el final de la línea. En este ejemplo se muestra parte de este archivo:
main 0x00010000 0x08000000 ; for PROJECT.exe
one 0x28000000 0x00100000 ; for DLLONE.DLL
two 0x28100000 0x00300000 ; for DLLTWO.DLL
Si el archivo que contiene estas líneas se denomina DLLS.txt, el siguiente comando de ejemplo aplica esta información:
link dlltwo.obj /dll /base:@dlls.txt,two
Otra manera de establecer la dirección base es mediante el argumento BASE
en una instrucción NAME
o LIBRARY
. Las opciones /BASE
y /DLL
juntas son equivalentes a la instrucción LIBRARY
.
Para establecer esta opción del vinculador en el entorno de desarrollo de Visual Studio
Abra el cuadro de diálogo Páginas de propiedades del proyecto. Para más información, vea Establecimiento del compilador de C++ y de propiedades de compilación en Visual Studio.
Seleccione la página de propiedades Propiedades de configuración>Enlazador>Avanzado.
Modifique la propiedad Dirección base.
Para establecer esta opción del vinculador mediante programación
- Vea BaseAddress.