Введение

Технология, используемая в процессорах

Бит NX (no-execute) — это технология, используемая в процессорах для разделения областей виртуального адресного пространства с целью хранения либо данных, либо инструкций процессора. Операционная система, поддерживающая бит NX, может пометить определенные области адресного пространства как неисполняемые. В этом случае процессор откажется выполнять какой-либо код, находящийся в этих областях адресного пространства. Общая техника, известная как защита исполняемого пространства, также называемая Write XOR Execute, используется для предотвращения захвата контроля над компьютером определенными типами вредоносного программного обеспечения путем внедрения их кода в область хранения данных другой программы и запуска этого кода из этого раздела; один из классов таких атак известен как атака переполнения буфера. Термин NX bit впервые был использован компанией Advanced Micro Devices (AMD) в качестве маркетингового термина. Intel продает эту функцию под названием XD bit (execute disable). Архитектура MIPS обозначает эту функцию как XI bit (execute inhibit). Архитектура ARM, начиная с ARMv6, называет эту функцию XN (execute never). Сам термин NX bit иногда используется для описания аналогичных технологий в других процессорах.

x86

Процессоры x86, начиная с 80286, включали схожую возможность, реализованную на уровне сегментов. Однако почти все операционные системы для 80386 и более поздних процессоров x86 используют модель плоской памяти, поэтому не могут воспользоваться этой возможностью. В этих процессорах отсутствовал флаг "Исполняемый" в записи таблицы страниц (дескриптор страницы), пока AMD не добавила бит "no execute" или NX в запись таблицы страниц в своей архитектуре AMD64, чтобы предоставить эту возможность операционным системам, использующим модель плоской памяти. Это обеспечило механизм контроля выполнения кода на уровне отдельных страниц, а не целых сегментов. Intel реализовала аналогичную функцию в своем процессоре Itanium (Merced) с архитектурой IA 64 в 2001 году, но не внедрила ее в более популярные семейства процессоров x86 (Pentium, Celeron, Xeon и т. д.). В архитектуре x86 впервые AMD реализовала эту функцию в виде бита NX для использования в линейке процессоров AMD64, таких как Athlon 64 и Opteron. После решения AMD включить эту функциональность в свой набор инструкций AMD64, Intel реализовала аналогичную функцию XD-бита в процессорах x86, начиная с процессоров Pentium 4 на базе более поздних итераций ядра Prescott. Бит NX относится конкретно к биту номер 63 (то есть наиболее значащему биту) 64-битной записи в таблице страниц. Если этот бит установлен в 0, код может быть выполнен с этой страницы; если установлен в 1, выполнение кода с этой страницы запрещено, и все данные, находящиеся там, рассматриваются как данные. Он доступен только в формате таблицы страниц длинного режима (64-битный режим) или устаревшего формата таблицы страниц Physical Address Extension (PAE), но не в оригинальном 32-битном формате таблицы страниц x86, поскольку записи таблицы страниц в этом формате не содержат 64-й бит, используемый для отключения и включения выполнения. Windows XP SP2 и более поздние версии поддерживают технологию предотвращения выполнения данных (DEP).

РАМ

В ARMv6 был представлен новый формат записи таблицы страниц, включающий бит "запрета выполнения".

Альфа

По состоянию на четвертое издание руководства по архитектуре Alpha, DEC (ныне HP) Alpha имеет бит Fault on Execute в записях таблиц страниц для OpenVMS, Tru64 UNIX и PALcode Alpha Linux.

Спарк

SPARC Reference MMU для Sun SPARC версии 8 имеет значения разрешений «Только чтение», «Чтение/Запись», «Чтение/Выполнение» и «Чтение/Запись/Выполнение» в записях таблицы страниц, хотя не все процессоры SPARC оснащены SPARC Reference MMU. SPARC версии 9 MMU может предоставлять, но не обязана предоставлять, любую комбинацию разрешений на чтение, запись и выполнение. Запись таблицы перевода в буфере хранения перевода в архитектуре Oracle SPARC 2011, проект D1.0.0, имеет отдельные биты «Выполняемый» и «Записываемый».

PowerPC/Power ISA

В записях таблицы страниц для хэшированных таблиц страниц IBM PowerPC присутствует бит запрета выполнения. В записях таблицы страниц для таблиц страниц на основе radix tree в Power ISA имеются отдельные биты разрешений, предоставляющие доступ на чтение/запись и выполнение.

PA-RISC

Записи буфера просмотра трансляций (TLB) и записи таблиц страниц в PA RISC 1.1 и PA RISC 2.0 поддерживают страницы только для чтения, чтения/записи, чтения/выполнения и чтения/записи/выполнения.

Итаний

Записи TLB в Itanium поддерживают страницы только для чтения, для чтения и записи, для чтения и выполнения, а также для чтения, записи и выполнения.

z/Архитектура

Начиная с двенадцатого издания «Принципов работы z/Architecture», процессоры z/Architecture могут поддерживать средство защиты исполнения инструкций (Instruction Execution Protection), которое добавляет бит в записях таблицы страниц, контролирующий возможность выполнения инструкций из заданной области, сегмента или страницы.