Nepřímá větev - Indirect branch
![]() | tento článek potřebuje další citace pro ověření.Květen 2018) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
Strojový kód |
---|
Obecné pojmy |
Instrukce |
An nepřímá větev (také známý jako vypočítaný skok, nepřímý skok a registrační nepřímý skok) je typ instrukce ovládání programu přítomný v některých jazyk stroje instrukční sady. Spíše než specifikovat adresa dalšího návod na vykonat, jako v přímém větev, argument určuje, kde se adresa nachází. Příkladem je „nepřímý skok na r1 Registrovat ', což znamená, že další instrukce, která má být provedena, je na adrese v registru r1. Adresa, na kterou se má přeskočit, není známa, dokud není provedena instrukce. Nepřímé větve mohou také záviset na hodnotě a umístění paměti.
Nepřímá větev může být užitečná pro vytvoření a podmíněná větev, zejména a vícecestná větev. Například na základě programu vstup, hodnotu lze vyhledat v a skokový stůl ukazatelů na kód pro řešení různých případů implikovaných datovou hodnotou. The data hodnotu lze přidat na adresu tabulky s výsledkem uloženým v registru. Poté by mohl být proveden nepřímý skok na základě hodnoty tohoto registru, který efektivně odešle řízení programu do kódu vhodného pro vstup.
Podobným způsobem podprogram pokyny k volání mohou být nepřímé, přičemž adresa podprogramu, který má být vyvolán, je uvedena v paměti. Ukazatele funkcí jsou obvykle implementovány nepřímými voláními podprogramů.
Jedním z útočných povrchů byly nepřímé větve Přízrak. Pro zmírnění útoku představila GCC 8.1 následující nové možnosti: -mindirect-branch =
, -funkce-návrat =
a -mindirect-branch-register
.[1][poznámka 1]
Příklad syntaxe assembleru
MSP430: br r15
SPARC: jmpl% o7
MIPS: jr $ ra
X86 (Syntaxe AT&T): jmp *% eax
X86 (Intel Syntax): jmp eax
PAŽE: mov ks, r2
Itanium (rodina x86): br.ret.sptk.few rp
6502: jmp (0 $ DEA)
65C816: jsr (0 $ DEA,X)
6809: jmp [$ 0DEA]
,jmp B, X
,jmp [B, X]
6800: jmp 0, X
Z80: jp (hl)
Intel 8080: pchl
IBM System z: bcr cond, r1
[2]RISC-V: jalr x0, 0 (x1)
Viz také
- Tabulka větví
- Nepřímé závitování
- Nepřímé ovládání větví (IBC)
- Spekulace omezené na nepřímou větev (IBRS)
- Nepřímá bariéra predikce větví (IBPB)
- Prediktor nepřímé větve jednoho vlákna (STIBP)
Poznámky
Reference
- ^ Larabel, Michael (2018-01-14). „Zmírnění přízraků přidáno do GCC 8, hledání backportu do GCC 7“. Archivováno od originálu na 2018-01-20. Citováno 2018-01-19.
- ^ „z / Architecture - Principy fungování“ (4. vyd.). IBM. Květen 2004 [1990]. SA22-7832-03. Archivováno z původního dne 2016-03-04. Citováno 2018-05-26.
![]() | Tento programování související článek je a pahýl. Wikipedii můžete pomoci pomocí rozšiřovat to. |