Intel MPX

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Intel MPX (англ. Memory Protection Extensions) — набір розширень архітектури x86, запропонований Intel. З відповідною підтримкою компілятора, бібліотеки середовища виконання[en] і операційної системи, MPX мав на меті підвищення захищеності програмного забезпечення комп'ютерів шляхом перевірки вказівників, які можуть потенційно приводити до переповнення буфера.

Розширення[ред. | ред. код]

Intel MPX додає до стандартної архітектури x86 кілька нових регістрів спеціально для перевірки меж ділянок пам'яті (англ. bound registers, «межові регістри»), і нові інструкції для роботи з цими регістрами. Додатково вводиться набір так званих «таблиць меж» (англ. bound tables), де зберігаються значення меж, що не вмістилися у межові регістри.[1][2][3][4][5]

Нові межові регістри — 128-розрядні, названі від BND0 до BND3. Кожен регістр містить пару 64-розрядних значень: нижню межу LB (англ. lower bound) і верхню межу UB (англ. upper bound) буфера пам'яті. Верхня межа зберігається у оберненому коді; конверсія здійснюється інструкціями BNDMK («створити межу», англ. create bounds) і BNDCU («перевірити верхню межу», англ. check upper bound). Два регістра конфігурації BNDCFGx (BNDCFGU у просторі користувача, і BNDCFGS у режимі ядра), а також регістр статусу BNDSTATUS, який надає адресу і код помилки у випадку порушення доступу.[6][7]

Для збереження меж у пам'яті використовується дворівнева трансляція адрес. Верхній рівень складається з каталога меж (англ. Bounds Directory, BD), і створюється при старті програми. Кожен елемент каталога є або порожнім, або містить вказівник на таблицю меж (англ. Bounds Table, BT), що створюється динамічно, і яка містить множину меж і відповідних лінійних адрес вказівників. Інструкції «завантажити межі» (BNDLDX, англ. bounds load) і «зберегти межі» (BNDSTX, англ. store bounds) прозоро здійснюють трансляцію адрес і меж у відповідному елементі таблиці меж.[6][7]

Вперше реалізація MPX з'явилася у мікроархітектурі Intel Skylake.[8]

Мікроархітектура Intel Goldmont також підтримує MPX.[8]

Джерела[ред. | ред. код]

  1. Intel ISA Extensions. Intel. Архів оригіналу за 6 травня 2019. Процитовано 4 листопада 2013.
  2. Introduction to Intel Memory Protection Extensions. Intel. 16 липня 2013. Архів оригіналу за 5 травня 2019. Процитовано 10 вересня 2013.
  3. Discussion of Intel Memory Protection Extensions (MPX) and comparison with AddressSanitizer. code.google.com. Архів оригіналу за 4 липня 2015. Процитовано 4 листопада 2013.
  4. Intel® Memory Protection Extensions (Intel® MPX) support in the GCC compiler. gcc.gnu.org. Архів оригіналу за 11 червня 2019. Процитовано 4 листопада 2013.
  5. Intel MPX Explained: Storing bounds in memory. intel-mpx.github.io. Архів оригіналу за 24 червня 2018. Процитовано 6 лютого 2017.
  6. а б Intel Architecture Instruction Set Extensions Programming Reference. Intel. December 2013. Архів оригіналу (PDF) за 16 травня 2016. Процитовано 17 січня 2014.
  7. а б Oleksenko, Oleksii; Kuvaiskii, Dmitrii; Bhatotia, Pramod; Felber, Pascal; Fetzer, Christof (2017). Intel MPX Explained: An Empirical Study of Intel MPX and Software-based Bounds Checking Approaches. arXiv:1702.00719 [cs.CR].
  8. а б Intel Software Development Emulator. Intel. 15 червня 2012. Архів оригіналу за 6 травня 2019. Процитовано 4 листопада 2013.