бит NX


Бит NX (без выполнения) — это технология, используемая в ЦП для разделения областей памяти для использования либо для хранения инструкций процессора (кода), либо для хранения данных, что обычно встречается только в процессорах с гарвардской архитектурой . Однако бит NX все чаще используется в обычных процессорах с архитектурой фон Неймана из соображений безопасности.

Операционная система с поддержкой бита NX может помечать определенные области памяти как неисполняемые. Затем процессор откажется выполнять любой код, находящийся в этих областях памяти. Общий метод, известный как защита исполняемого пространства , также называемый Write XOR Execute , используется для предотвращения захвата компьютеров определенными типами вредоносного программного обеспечения путем вставки их кода в область хранения данных другой программы и запуска собственного кода из этого раздела; один класс таких атак известен как атака переполнения буфера .

Термин « бит NX » возник в компании Advanced Micro Devices (AMD) в качестве маркетингового термина. Intel продает эту функцию как бит XD (отключение выполнения). Архитектура ARM относится к функции, которая была введена в ARMv6 , как XN (не выполнять никогда). [1] Сам термин бит NX иногда используется для описания аналогичных технологий в других процессорах.

Процессоры x86 , начиная с 80286 , включали аналогичную возможность, реализованную на уровне сегмента . Однако почти все операционные системы для процессоров x86 80386 и более поздних версий реализуют плоскую модель памяти , поэтому они не могут использовать эту возможность. В этих процессорах не было флага «Исполняемый» в записи таблицы страниц (дескриптор страницы), пока, чтобы сделать эту возможность доступной для операционных систем, использующих модель плоской памяти, AMD не добавила к странице бит «не выполнять» или бит NX. запись таблицы в своей архитектуре AMD64 , обеспечивающая механизм, который может управлять выполнением для каждой страницы , а не для всего сегмента.

Intel реализовала аналогичную функцию в своем процессоре Itanium ( Merced ) — имеющем архитектуру IA-64 — в 2001 году, но не привнесла ее в более популярные семейства процессоров x86 ( Pentium , Celeron , Xeon и т. д .). В архитектуре x86 он был впервые реализован компанией AMD как бит NX для использования линейкой процессоров AMD64 , таких как Athlon 64 и Opteron . [2]

После решения AMD включить эту функцию в свой набор инструкций AMD64 Intel реализовала аналогичную битовую функцию XD в процессорах x86, начиная с процессоров Pentium 4 , основанных на более поздних итерациях ядра Prescott. [3] Бит NX конкретно относится к биту номер 63 (т. е. старшему биту) 64-битной записи в таблице страниц . Если этот бит установлен в 0, то код может выполняться с этой страницы; если установлено значение 1, код не может быть выполнен с этой страницы, и предполагается, что все, что там находится, является данными. Он доступен только в длинном режиме (64-битном режиме) или устаревшем расширении физического адреса.(PAE) форматы таблицы страниц, но не исходный 32-битный формат таблицы страниц x86, потому что в записях таблицы страниц в этом формате отсутствует 63-й бит, используемый для отключения и включения выполнения.