Intel MPX

Intel MPX (англ. Memory Protection Extensions) — набір розширень архітектури x86, запропонований Intel. З відповідною підтримкою компілятора, бібліотеки середовища виконання і операційної системи, 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. Процитовано 4 листопада 2013.
  2. Introduction to Intel Memory Protection Extensions. Intel. 16 липня 2013. Процитовано 10 вересня 2013.
  3. Discussion of Intel Memory Protection Extensions (MPX) and comparison with AddressSanitizer. code.google.com. Процитовано 4 листопада 2013.
  4. Intel® Memory Protection Extensions (Intel® MPX) support in the GCC compiler. gcc.gnu.org. Процитовано 4 листопада 2013.
  5. Intel MPX Explained: Storing bounds in memory. intel-mpx.github.io. Процитовано 6 лютого 2017.
  6. Intel Architecture Instruction Set Extensions Programming Reference (PDF). Intel. December 2013. Процитовано 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. Процитовано 4 листопада 2013.
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.