Каково состояние таблиц страниц после kexec'а в двоичный файл ELF x86_64? - PullRequest
5 голосов
/ 03 октября 2019

Я вхожу в двоичный файл, который я написал, скомпилированный в ELF x86_64. Он работает нормально.

Поскольку это 64-битный двоичный файл, я знаю, что процессор должен находиться в режиме 64-битной длины. Для чего требуется использование подкачки, поэтому я знаю, что подкачка должна быть включена.

Мой вопрос: каково состояние этих таблиц страниц? Есть ли какая-либо область, например, мой загруженный двоичный файл, который гарантированно будет отображаться как личность? Все ли идентификаторы доступной оперативной памяти сопоставлены? Поскольку подкачка страниц включена, где находятся страницы?

После kexec'ing я хотел бы идентифицировать карту всего адресного пространства. Чтобы сделать это, мне нужно построить несколько структур таблицы страниц по адресу, к которому я знаю физический адрес, а затем записать адрес этой структуры в CR3.

Если бы я знал, что двоичный файл эльфа загружен в памятьПосле отображения идентификатора я мог бы статически создавать таблицы страниц, а затем легко переключаться между ними. Если после kexec нет идентифицированных страниц, мне нужно отключить подкачку страниц, выйти из длинного режима и настроить его, а затем снова войти в длинный 64-битный режим.

Спасибо!

1 Ответ

0 голосов
/ 12 октября 2019

Части процесса kexec, специфичные для x86-64, обрабатываются в arch/x86/kernel/machine_kexec_64.c.

Короче говоря: ядро ​​выделяет таблицу страниц, и функция init_pgtable инициализируетсяэто будет отображение личности. Так что да, ваша схема должна работать.

...