Поделиться через


/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 и имеет следующий синтаксис:

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

  1. Откройте диалоговое окно Страницы свойств проекта. Подробнее см. в статье Настройка компилятора C++ и свойства сборки в Visual Studio.

  2. Выберите страницу свойств>компоновщика>конфигурации Advanced.

  3. Измените свойство Base Address .

Задание данного параметра компоновщика программным способом

См. также

Справочник по компоновщику MSVC
Параметры компоновщика MSVC