Какова цель защиты памяти mmap PROT_NONE

Я читал документацию mmap и падал на эту строку:

PROT_NONE Страницы могут быть недоступны.

Можно ли использовать карту для сопоставления файла в память, но не получить к ней доступ?

Ответ 1

PROT_NONE может использоваться для реализации защитных страниц, Microsoft имеет ту же концепцию (MSDN).

Чтобы процитировать первую ссылку:

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

Таким образом, он полезен при реализации защиты для таких областей, как сетевое взаимодействие, виртуальные машины и интерпретаторы. Пример использования: pthread_attr_setguardsize, pthread_attr_getguardsize.

Ответ 2

Одно из возможных приложений: вы можете использовать его для резервирования диапазона памяти. После выделения такого региона вы можете использовать указатели в этом диапазоне как специальные значения.

Одно из возможных приложений - это библиотека, которая прозрачно переключается между "маленькими" и "большими" целыми числами с небольшой оптимизацией значений. Большое целое будет представлено в виде указателя на область памяти, содержащую фактическое число. Маленьким целым будет указатель, указывающий на эту зарезервированную область памяти, представляющую число, равное смещению в этой области. (Я не говорю, что это лучший метод для реализации такой библиотеки, только чтобы это было возможно.)

Ответ 3

PROT_NONE выделяет смежную область виртуальной памяти без предоставления разрешений.

Это может быть полезно, как и другие упомянутые, для реализации защитных приспособлений (страницы, которые при касании вызывают segfaults, как для поиска ошибок, так и для безопасности) или "волшебные" указатели, где значения в сопоставлении PROT_NONE должны интерпретироваться как нечто иное, кроме указателя,

Другое применение - когда приложение хочет сопоставить несколько независимых отображений как практически непрерывное отображение. Это будет сделано с помощью первого mmapping достаточно большого фрагмента с PROT_NONE, а затем выполнения других вызовов mmap с флагом MAP_FIXED и адреса, установленного в области сопоставления PROT_NONE (использование MAP_FIXED автоматически отменяет часть переопределенных отображений ").