Jump to content

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

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

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

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

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

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

[ редактировать ]
МСП430 : br r15
СПАРК : jmpl %o7
МИПС : jr $ra
x86 (синтаксис AT&T): jmp *%eax
x86 (синтаксис Intel): jmp eax
РУКА : BX r0, mov pc, r2
Itanium (семейство x86): br.ret.sptk.few rp
6502 :    jmp ($0DEA)
65C816 : jsr ($0DEA,X)
6809 jmp [$0DEA], jmp B,X, jmp [B,X]
6800 jmp 0,X
Z80 : jp (hl)
Intel MCS-51 : jmp @A+DPTR
Интел 8080 : pchl
IBM Система z : bcr cond,r1[2]
РИСК-V : jalr x0, 0(x1)

См. также

[ редактировать ]

Примечания

[ редактировать ]
  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 г.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 88ccaa8c7670cc3f72c864fb4f8b2a5e__1722377220
URL1:https://arc.ask3.ru/arc/aa/88/5e/88ccaa8c7670cc3f72c864fb4f8b2a5e.html
Заголовок, (Title) документа по адресу, URL1:
Indirect branch - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)