Он отмечает страницу памяти как неисполняемую в системе виртуальной памяти и в TLB (структура, используемая ЦП для разрешения сопоставлений виртуальной памяти). Если какой-либо программный код будет выполняться с такой страницы, ЦП сбоит и передаст управление операционной системе для обработки ошибок.
Программы обычно имеют свой двоичный код и статические данные в разделе «только для чтения», и если они когда-либо попытаются записать туда, произойдет сбой ЦП, а затем операционная система обычно убивает приложение (это известно как ошибка сегментации или нарушение доступа).
По соображениям безопасности память данных для чтения / записи программы обычно по умолчанию защищена NX. Это препятствует тому, чтобы злоумышленник предоставил некоторому приложению свой вредоносный код в качестве данных, заставил приложение записать его в свою область данных и затем каким-то образом выполнил этот код, обычно из-за уязвимости переполнения буфера / переполнения в приложении, перезаписывая адрес возврата функции в стеке с расположением вредоносного кода в области данных.
Некоторым законным приложениям (особенно высокопроизводительным эмуляторам и JIT-компиляторам) также необходимо выполнять свои данные, поскольку они компилируют код во время выполнения, но они специально выделяют память без установленного для этого флага NX.