Intel MPX () — набір розширень архітектури x86, запропонований Intel. З відповідною підтримкою компілятора, бібліотеки середовища виконання і операційної системи, MPX мав на меті підвищення захищеності програмного забезпечення комп'ютерів шляхом перевірки вказівників, які можуть потенційно приводити до переповнення буфера.
Розширення Intel MPX додає до стандартної архітектури x86 кілька нових регістрів спеціально для перевірки меж ділянок пам'яті (, «межові регістри»), і нові інструкції для роботи з цими регістрами. Додатково вводиться набір так званих «таблиць меж» (), де зберігаються значення меж, що не вмістилися у межові регістри.
Нові межові регістри — 128-розрядні, названі від BND0 до BND3. Кожен регістр містить пару 64-розрядних значень: нижню межу LB () і верхню межу UB () буфера пам'яті. Верхня межа зберігається у оберненому коді; конверсія здійснюється інструкціями BNDMK («створити межу», ) і BNDCU («перевірити верхню межу», ). Два регістра конфігурації BNDCFGx (BNDCFGU у просторі користувача, і BNDCFGS у режимі ядра), а також регістр статусу BNDSTATUS, який надає адресу і код помилки у випадку порушення доступу.
Для збереження меж у пам'яті використовується дворівнева трансляція адрес. Верхній рівень складається з каталога меж (, BD), і створюється при старті програми. Кожен елемент каталога є або порожнім, або містить вказівник на таблицю меж (, BT), що створюється динамічно, і яка містить множину меж і відповідних лінійних адрес вказівників. Інструкції «завантажити межі» (BNDLDX, ) і «зберегти межі» (BNDSTX, ) прозоро здійснюють трансляцію адрес і меж у відповідному елементі таблиці меж.
Вперше реалізація MPX з'явилася у мікроархітектурі Intel Skylake.
Мікроархітектура Intel Goldmont також підтримує MPX.
Джерела