Введение
Технология, используемая в процессорах
The NX bit (no execute) is a technology used in CPUs to segregate areas of a virtual address space to store either data or processor instructions. An operating system with support for the NX bit may mark certain areas of an address space as non executable. The processor will then refuse to execute any code residing in these areas of the address space. The general technique, known as executable space protection, also called Write XOR Execute, is used to prevent certain types of malicious software from taking over computers by inserting their code into another program's data storage area and running their own code from within this section; one class of such attacks is known as the buffer overflow attack. The term NX bit originated with Advanced Micro Devices (AMD), as a marketing term. Intel markets the feature as the XD bit (execute disable). The MIPS architecture refers to the feature as XI bit (execute inhibit). The ARM architecture refers to the feature, which was introduced in ARMv6, as XN (execute never). The term NX bit itself is sometimes used to describe similar technologies in other processors.
Бит 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 иногда используется для описания аналогичных технологий в других процессорах.
The NX bit (no execute) is a technology used in CPUs to segregate areas of a virtual address space to store either data or processor instructions. An operating system with support for the NX bit may mark certain areas of an address space as non executable. The processor will then refuse to execute any code residing in these areas of the address space. The general technique, known as executable space protection, also called Write XOR Execute, is used to prevent certain types of malicious software from taking over computers by inserting their code into another program's data storage area and running their own code from within this section; one class of such attacks is known as the buffer overflow attack. The term NX bit originated with Advanced Micro Devices (AMD), as a marketing term. Intel markets the feature as the XD bit (execute disable). The MIPS architecture refers to the feature as XI bit (execute inhibit). The ARM architecture refers to the feature, which was introduced in ARMv6, as XN (execute never). The term NX bit itself is sometimes used to describe similar technologies in other processors.
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), которое добавляет бит в записях таблицы страниц, контролирующий возможность выполнения инструкций из заданной области, сегмента или страницы.