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]
- ↑ Intel ISA Extensions. Intel. Архів оригіналу за 6 травня 2019. Процитовано 4 листопада 2013.
- ↑ Introduction to Intel Memory Protection Extensions. Intel. 16 липня 2013. Архів оригіналу за 5 травня 2019. Процитовано 10 вересня 2013.
- ↑ Discussion of Intel Memory Protection Extensions (MPX) and comparison with AddressSanitizer. code.google.com. Архів оригіналу за 4 липня 2015. Процитовано 4 листопада 2013.
- ↑ Intel® Memory Protection Extensions (Intel® MPX) support in the GCC compiler. gcc.gnu.org. Архів оригіналу за 11 червня 2019. Процитовано 4 листопада 2013.
- ↑ Intel MPX Explained: Storing bounds in memory. intel-mpx.github.io. Архів оригіналу за 24 червня 2018. Процитовано 6 лютого 2017.
- ↑ а б Intel Architecture Instruction Set Extensions Programming Reference. Intel. December 2013. Архів оригіналу (PDF) за 16 травня 2016. Процитовано 17 січня 2014.
- ↑ а б 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].
- ↑ а б Intel Software Development Emulator. Intel. 15 червня 2012. Архів оригіналу за 6 травня 2019. Процитовано 4 листопада 2013.