Содержит ли указатель стека виртуальный адрес или физический адрес при включении режима long и подкачки на x86-64

#stack #x86-64 #elf #bootloader

#стек #x86-64 #elf #загрузчик

Вопрос:

Я пишу минимальную ОС с нуля. Я включил подкачку и длительный режим, но когда я хочу настроить стек, у меня возникает несколько вопросов.

  1. Содержит ли указатель стека виртуальный адрес, автоматически преобразуемый MMU в физический адрес при использовании инструкций PUSH, POP?

  2. Упоминается ли позиция стека в файле ELF?

Комментарии:

1. Когда подкачка включена, все адреса являются виртуальными. Если ваши таблицы страниц не сопоставлены с идентификаторами (поэтому virt = phys), вам придется изменить RSP, чтобы указать правильный виртуальный адрес.

Ответ №1:

Указатель стека должен быть виртуальным адресом после включения подкачки.

Стандартный psABI x86-64 не указывает начальное значение для указателя стека, поэтому он не отображается в файлах ELF. Наиболее распространенный загрузчик программ (Linux) по умолчанию рандомизирует адрес стека.