Изменяет ли mmap флаги, хранящиеся в таблице страниц?

Насколько мне известно,

MMAP может использоваться для изменения защиты отображаемой области памяти.

Например, если я хочу добавить исполняемый файл разрешения

на одну из моих страниц стека

который изначально установлен как доступное для чтения и записи разрешение

из-за политики выполнения данных (DEP).

И это разрешение отражено на флагах таблицы страниц, таких как W/XD в архитектуре x86.

Так что мой вопрос: если я изменю разрешение конкретной страницы, используя MMAP,

запрашивает ли ядро ​​изменение флагов таблицы страниц?

и он автоматически очищает TLB?

Благодарю.

1 ответ

TL;DR, в C/C++ обертывает системный вызов с тем же именем. Он используется для сопоставления новой памяти с выравниванием по страницам с адресным пространством вызывающего процесса. Он лениво изменяет таблицу страниц, то есть добавляет только запись в vm_area_structкогда звонили. Позже, когда вы впервые обращаетесь к возвращенной памяти, модификация таблицы страниц происходит в результате ошибки страницы. Таким образом, он изменяет таблицу страниц только при первом доступе. Итак, ясно, что для выделения новых страниц (что и происходит) их флаги защиты должны быть известны .

Так как используется для сопоставления новых страниц памяти, используется для изменения флагов/битов защиты уже сопоставленной памяти. Он также изменяет таблицу страниц, чтобы о новой защите знали все потоки/процессы, совместно использующие память.

Как я уже говорил, mmapа также mprotectоба системных вызова выполняются в режиме ядра; из соображений безопасности ни один процесс пользовательского пространства не может изменять свою таблицу страниц.

Надеюсь, этот краткий ответ поможет.

Другие вопросы по тегам