Articulo de referencia

Rama indirecta

Una bifurcación indirecta (también conocida como salto calculado , salto indirecto y salto indirecto de registro ) es un tipo de instrucción de control de programa presente en a...

Una bifurcación indirecta (también conocida como salto calculado , salto indirecto y salto indirecto de registro ) es un tipo de instrucción de control de programa presente en algunos conjuntos de instrucciones de lenguaje máquina . En lugar de especificar la dirección de la siguiente instrucción a ejecutar , como en una bifurcación directa , el argumento especifica dónde se encuentra la dirección. Un ejemplo es 'salto indirecto en el registro r1 ', lo que significa que la siguiente instrucción a ejecutar está en la dirección del registro r1. La dirección a la que se saltará no se conoce hasta que se ejecute la instrucción. Las bifurcaciones indirectas también pueden depender del valor de una ubicación de memoria .

Una bifurcación indirecta puede ser útil para crear una bifurcación condicional , especialmente una bifurcación múltiple . Por ejemplo, según la entrada del programa , se podría buscar un valor en una tabla de saltos que contiene punteros al código para gestionar los distintos casos que implica dicho valor. El valor se sumaría a la dirección de la tabla y el resultado se almacenaría en un registro. A continuación, se podría realizar una bifurcación indirecta en función del valor de ese registro, distribuyendo eficientemente el control del programa al código correspondiente a la entrada.

De manera similar, las instrucciones de llamada a subrutinas pueden ser indirectas, especificando la dirección de la subrutina que se va a llamar en la memoria. Los punteros a funciones suelen implementarse mediante llamadas indirectas a subrutinas.

Las ramas indirectas fueron una de las superficies de ataque de Spectre . Para mitigar el ataque , GCC 8.1 introdujo las siguientes nuevas opciones: -mindirect-branch=y -mfunction-return=. [ 1 ] [ nb 1 ]-mindirect-branch-register

Ejemplo de sintaxis de ensamblador

Véase también

Notas

  1. Consulte también laRETPOLINE=yfunción añadida en el kernel de Linux 4.14.14/4.9.77/4.4.112. Véase también: Retpoline

Referencias

  1. Larabel, Michael (14 de enero de 2018). "Mitigación de Spectre añadida a GCC 8, buscando retroportación a GCC 7" . Archivado del original el 20 de enero de 2018. Recuperado el 19 de enero de 2018 .
  2. "z/Architecture - Principles of Operation" (4.ª ed.). IBM . Mayo de 2004 [1990]. SA22-7832-03. Archivado del original el 4 de marzo de 2016. Consultado el 26 de mayo de 2018 .