Убедитесь, что программа загружает менее 4 ГБ, используя --image-base в Linux.

Я пытаюсь обеспечить загрузку определенного двоичного файла в пределах 4 ГБ физической памяти. В параметрах LD я вижу --image-base. В документации сказано: [Эта опция специфична для целевого порта i386 PE компоновщика]

В Linux, если я использую эту опцию, она говорит о нераспознанной опции '--image-base'.

Можем ли мы каким-либо образом гарантировать, что конкретный двоичный файл загружается ниже 4 ГБ в Linux?


person asmprogrammer    schedule 13.07.2012    source источник


Ответы (1)


Я пытаюсь обеспечить загрузку определенного двоичного файла в пределах 4 ГБ физической памяти.

Предполагая, что вы говорите о коде пользовательского уровня (приложения), а не о ядре Linux, вы можете гарантировать ничего в отношении физической памяти. Вы можете убедиться только в виртуальной памяти.

Ваш вопрос также не имеет смысла, если вы используете 32-разрядную систему, так как вся память в такой системе меньше 4 ГБ.

Таким образом, ваш вопрос звучит так: «Как мне связать исполняемый файл в 64-битной системе Linux, чтобы он загружался ниже 0x100000000

Предполагая, что вы используете x86_64, ответ таков: параметры ссылки по умолчанию уже делают это для основного исполняемого файла (но не для общих библиотек), поэтому вам не нужно делать ничего особенного. Если вы хотите, чтобы весь код загружался в пределах 4 ГБ, свяжите свое приложение с флагом -static (но будьте осторожны: это может не сработать по разным причинам, а также налагает лицензионные ограничения на ваш двоичный файл). .

person Employed Russian    schedule 15.07.2012
comment
Извините, если я не указал конкретный тип программы или тип архитектуры. Вот еще подробности: 1. Пытаюсь загрузить модуль ядра (драйвер) под 4 Гб физической памяти. 2. Я пробую это на 32-битном ядре PAE, где адрес загрузки модуля может быть от 4 ГБ до 5 ГБ (хотя в системе 4 ГБ). Это делается биосом для переразметки памяти с 3 Гб на 4 Гб. - person asmprogrammer; 16.07.2012