/BASE
(Базовый адрес)
Задает базовый адрес программы.
Синтаксис
/BASE:
{address
[,
size
] |@
filename
,
key
}
Замечания
Примечание.
По соображениям безопасности корпорация Майкрософт рекомендует использовать /DYNAMICBASE
этот параметр вместо указания базовых адресов для исполняемых файлов. /DYNAMICBASE
создает исполняемый образ, который может быть случайно перебазирован во время загрузки с помощью функции случайной разметки пространства адресов (ASLR) Windows. Параметр /DYNAMICBASE
включен по умолчанию.
Параметр /BASE
компоновщика задает базовый адрес для программы. Он переопределяет расположение по умолчанию для ФАЙЛА EXE или DLL. Базовый адрес по умолчанию для EXE-файла 0x400000 для 32-разрядных образов или 0x140000000 для 64-разрядных образов. Для библиотеки DLL базовый адрес по умолчанию 0x10000000 для 32-разрядных образов или 0x180000000 для 64-разрядных образов. В операционных системах, которые не поддерживают случайность макета адресного пространства (ASLR) или при /DYNAMICBASE:NO
установке параметра, операционная система сначала пытается загрузить программу по указанному или базовому адресу по умолчанию. Если недостаточно места там, система перемещает программу. Чтобы предотвратить перемещение, используйте /FIXED
этот параметр.
Компоновщик выдает ошибку, если address
не имеет значения 64K. При необходимости можно указать размер программы. Компоновщик выдает предупреждение, если программа не может соответствовать указанному размеру.
В командной строке можно указать базовый адрес с помощью файла ответа базового адреса. Файл ответа на базовый адрес — это текстовый файл, содержащий базовые адреса и необязательные размеры всех библиотек DLL, которые использует программа, и уникальный текстовый ключ для каждого базового адреса. Чтобы указать базовый адрес с помощью файла ответа, используйте знак при входе (@
), а затем имя файла ответа, filename
а затем запятую, а затем key
значение базового адреса, используемого в файле. Компоновщик ищет filename
либо указанный путь, либо если путь не указан, в каталогах, указанных в переменной LIB
среды. Каждая строка представляет filename
одну библиотеку DLL и имеет следующий синтаксис:
key
address
[size
];
comment
Строка key
буквенно-цифровых символов и не учитывает регистр. Обычно это имя библиотеки DLL, но это не обязательно. За key
ним следует база address
в C-языке, шестнадцатеричная или десятичная нотация и необязательное максимальное значение 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
Другим способом задать базовый адрес является использование аргумента BASE
в инструкции или LIBRARY
инструкцииNAME
. Параметры /BASE
и /DLL
параметры вместе эквивалентны инструкции LIBRARY
.
Задание данного параметра компоновщика в среде разработки Visual Studio
Откройте диалоговое окно Страницы свойств проекта. Подробнее см. в статье Настройка компилятора C++ и свойства сборки в Visual Studio.
Выберите страницу свойств>компоновщика>конфигурации Advanced.
Измените свойство Base Address .
Задание данного параметра компоновщика программным способом
- См. раздел BaseAddress.