Имеет ли x86_64 эквивалент aarch64 в инструкции?
Aarch64 ARM имеет инструкцию AT (Address Translate), которая запускает виртуальный адрес через этап трансляции адреса, возвращая физический адрес в PAR_EL1 вместе со статусом, чтобы указать, существует ли трансляция. См. ARMv8 ARM, раздел C5.5.
Вопрос: есть ли у x86_64 эквивалент? В Руководстве по системному программированию Intel (том 3, глава 5) говорится о проверке указателя, но эти методы, по-видимому, применимы к защите на уровне сегмента, и, похоже, нет никаких инструкций по проверке указателя защиты на уровне страницы.
Кто-нибудь знает о ARMv8-AT-подобной инструкции для x86_64?
1 ответ
Нет, в наборе команд x86-64 нет инструкции для преобразования физического адреса в виртуальный. Он содержит только основные инструкции, такие как настройка регистра каталога страниц, аннулирование адресов и включение подкачки.
Если вы хотите эту функцию на x86-64, я боюсь, что вам нужно быть в режиме супервизора, чтобы сделать это. Вы должны прочитать регистр CR3, возможно, измените несколько отображений таблиц страниц, чтобы получить доступ к нужным физическим адресам, и выполнить преобразование адресов, вручную пройдя каталог страниц и таблицы.
Ваш вопрос поднимает вопрос в ответ: с какой целью вам нужно знать о преобразовании виртуальных адресов в физические? Предполагается, что подкачка страниц прозрачна для прикладных программ, и редко бывает веской причиной узнать адрес физической памяти, соответствующий конкретному адресу виртуальной памяти.