Базовый адрес и размер библиотеки и исполняемого файла

#memory #memory-management #linker

Вопрос:

Я читал о базовом адресе образа и библиотеки dll. Я хочу знать, для чего обычно используется abse aqddress, насколько я понимаю, он используется для загрузки dll или образа по указанному базовому адресу в виртуальную оперативную память, правильно ли это?

В последующих параграфах текста источника объясняется, что мы можем указать размер и базовый адрес библиотеки Dll и образов, но если указанный размер меньше размера, требуемого для библиотеки dll или исполняемого файла образа, то компоновщик показывает ошибку. Может ли кто-нибудь объяснить, каковы утилиты определения размера?

https://docs.microsoft.com/en-us/cpp/build/reference/base-base-address?view=msvc-160

Ключ представляет собой строку буквенно-цифровых символов и не чувствителен к регистру. Обычно это имя библиотеки DLL, но это необязательно. За ключом следует базовый адрес на языке Си, в шестнадцатеричной или десятичной системе счисления и необязательный максимальный размер. Все три аргумента разделены пробелами или табуляциями. Компоновщик выдает предупреждение, если указанный размер меньше, чем виртуальное адресное пространство, требуемое программой. Комментарий указывается точкой с запятой (;) и может быть в той же или отдельной строке. Компоновщик игнорирует весь текст от точки с запятой до конца строки. В этом примере показана часть такого файла:

Скопируйте основной 0x00010000 0x08000000 ; для PROJECT.exe один
0x28000000 0x00100000 ; для DLLONE.DLL два 0x28100000
0x00300000 ; для DLLTWO.DLL, если файл, содержащий эти строки, называется DLLS.txt, следующая команда примера применяет эту информацию:

Скопируйте ссылку dlltwo.obj /dll /base:@dlls.txt,два Других способа задать базовый адрес-это использовать БАЗОВЫЙ аргумент в операторе NAME или LIBRARY. Параметры /BASE и /DLL вместе эквивалентны инструкции LIBRARY.