stringtranslate.com

бит NX

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

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

Поддержка архитектуры

х86

Процессоры 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, поскольку в записях таблицы страниц в этом формате отсутствует 64-й бит, используемый для отключить и включить выполнение.

Windows XP SP2 и более поздние версии поддерживают предотвращение выполнения данных (DEP).

РУКА

В ARMv6 был представлен новый формат записи таблицы страниц; он включает бит «никогда не выполнять». [1] Для дескрипторов блоков и страниц ARMv8-A , VMSAv8-64, а также дескрипторов блоков и страниц с длинными дескрипторами VMSAv8-32 для перевода этапа 1 имеются биты «не выполнять никогда» как для привилегированных, так и для непривилегированных режимов, а также дескрипторы блоков и страниц. для трансляции этапа 2 имеется один бит «никогда не выполнять» (два бита из-за функции ARMv8.2-TTS2UXN); Дескрипторы таблицы трансляции коротких дескрипторов VMSAv8-32 на уровне 1 имеют биты «никогда не выполнять» как для привилегированного, так и непривилегированного режима, а на уровне 2 имеют один бит «никогда не выполнять». [4]

Альфа

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

СПАРК

Эталонный MMU SPARC для Sun SPARC версии 8 имеет значения разрешений «Только чтение», «Чтение/запись», «Чтение/выполнение» и «Чтение/запись/выполнение» в записях таблицы страниц, [6] хотя не все процессоры SPARC имеют эталонный MMU SPARC.

MMU SPARC версии 9 может предоставлять, но не обязан предоставлять любую комбинацию разрешений на чтение/запись/выполнение. [7] Запись таблицы трансляции в буфере хранения переводов в архитектуре Oracle SPARC 2011, проект D1.0.0 имеет отдельные биты исполняемого и записываемого файлов. [8]

PowerPC/Power ISA

Записи таблицы страниц для хешированных таблиц страниц IBM PowerPC имеют бит страницы, запрещающий выполнение. [9] Записи таблицы страниц для таблиц страниц с базовым деревом в Power ISA имеют отдельные биты разрешений, предоставляющие доступ на чтение/запись и выполнение. [10]

ПА-РИСК

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

Итаний

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

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

Начиная с двенадцатого издания « Принципов работы z/Architecture» , процессоры z/Architecture могут поддерживать функцию защиты от выполнения инструкций, которая добавляет в записи таблицы страниц бит, определяющий, могут ли инструкции из данного региона, сегмента или страницы быть казнён. [14]

Смотрите также

Рекомендации

  1. ^ ab «Справочное руководство по архитектуре ARM» (PDF) . АРМ Лимитед . стр. В4-8,В4-27. Архивировано из оригинала (PDF) 6 февраля 2009 г. Биты APX и XN (никогда не выполнять) были добавлены в VMSAv6 [архитектура системы виртуальной памяти].
  2. ^ Тед Симпсон; Джейсон Новак (24 мая 2017 г.). Практические занятия по виртуальным вычислениям. Cengage Обучение. стр. 8–9. ISBN 978-1-337-10193-6.
  3. ^ «Предотвращение выполнения данных» (PDF) . Hewlett Packard. 2005 . Проверено 23 марта 2014 г.
  4. ^ «Справочное руководство по архитектуре ARM, ARMv8, для профиля архитектуры ARMv8-A» . АРМ Лимитед. стр. Д4-1779,Д4-1780,Д4-1781,Г4-4042,Г4-4043,Г4-4044,Г4-4054,Г4-4055.
  5. ^ Справочное руководство по архитектуре Alpha (PDF) (Четвертое изд.). Компьютер Компак . Январь 2002 г., стр. 11-5,17-5,22-5.
  6. ^ «Руководство по архитектуре SPARC, версия 8» . СПАРК Интернэшнл . п. 244.
  7. ^ Руководство по архитектуре SPARC, версия 9 (PDF) . СПАРК Интернэшнл. 1994. F.3.2 Атрибутирует ассоциированные MMU при каждом сопоставлении, стр. 284. ИСБН 0-13-825001-4. Архивировано из оригинала (PDF) 18 января 2012 г.
  8. ^ «Архитектура Oracle SPARC 2011, проект D1.0.0» (PDF) . Корпорация Оракл . 12 января 2016. с. 452.
  9. ^ Книга III по архитектуре операционной среды PowerPC, версия 2.01 . ИБМ . Декабрь 2003. с. 31.
  10. ^ «Power ISA версии 3.0» . ИБМ. 30 ноября 2015 г. с. 1003.
  11. ^ «Справочное руководство по архитектуре и набору команд PA-RISC 1.1, третье издание» (PDF) . Hewlett Packard . Февраль 1994 г. с. 3-13. Архивировано из оригинала (PDF) 7 июня 2011 года.
  12. ^ Джерри Кейн. «Архитектура PA-RISC 2.0, Глава 3: Адресация и контроль доступа» (PDF) . Hewlett Packard. п. 3-14. Архивировано из оригинала (PDF) 9 января 2017 г.
  13. ^ «Руководство разработчика программного обеспечения для архитектуры Intel Itanium, том 2: Архитектура системы, версия 2.0» . Интел. Декабрь 2001. с. 2:46. Архивировано из оригинала 9 января 2017 года.
  14. ^ z/Принципы работы архитектуры (PDF) . ИБМ. Сентябрь 2017. с. 3-14.

Внешние ссылки