stringtranslate.com

Косвенная ветка

Косвенный переход (также известный как вычисляемый переход , косвенный переход и косвенный переход по регистру ) — это тип команды управления программой, присутствующей в некоторых наборах команд машинного языка . Вместо указания адреса следующей выполняемой инструкции , как в прямом переходе , аргумент указывает , где находится адрес. Примером может служить «косвенный переход по регистру r1 », что означает, что следующая инструкция, которая будет выполнена, находится по адресу в регистре r1. Адрес, по которому осуществляется переход, неизвестен до тех пор, пока инструкция не будет выполнена. Косвенные переходы также могут зависеть от значения ячейки памяти .

Косвенное ветвление может быть полезно для создания условного ветвления , особенно многопутевого ветвления . Например, на основе ввода программы значение можно найти в таблице переходов указателей на код для обработки различных случаев, подразумеваемых значением данных. Значение данных можно добавить к адресу таблицы, а результат сохранить в регистре. Затем можно было бы выполнить косвенный переход на основе значения этого регистра, эффективно перенаправив управление программой на код, соответствующий вводу.

Аналогичным образом инструкции вызова подпрограммы могут быть косвенными, при этом адрес вызываемой подпрограммы указывается в памяти. Указатели функций обычно реализуются с помощью косвенных вызовов подпрограмм.

Косвенные ответвления были одной из поверхностей атаки Spectre . Для смягчения атаки в GCC 8.1 представлены следующие новые параметры: -mindirect-branch=, -mfunction-return=и -mindirect-branch-register. [1] [номер 1]

Пример синтаксиса ассемблера

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

Примечания

  1. ^ Также ознакомьтесь с RETPOLINE=yфункцией, добавленной в ядро ​​Linux 4.14.14/4.9.77/4.4.112. См. Также: Ретполин

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

  1. ^ Ларабель, Майкл (14 января 2018 г.). «В GCC 8 добавлена ​​защита от Spectre, требуется бэкпорт в GCC 7». Архивировано из оригинала 20 января 2018 г. Проверено 19 января 2018 г.
  2. ^ «z/Architecture - Принципы работы» (4-е изд.). ИБМ . Май 2004 г. [1990]. SA22-7832-03. Архивировано из оригинала 4 марта 2016 г. Проверено 26 мая 2018 г.