Articulo de referencia

Tabla de desplazamiento global

La tabla de desplazamiento global , o GOT , es una sección de la memoria de un programa informático (ejecutables y bibliotecas compartidas) que se utiliza para permitir que el c...

La tabla de desplazamiento global , o GOT , es una sección de la memoria de un programa informático (ejecutables y bibliotecas compartidas) que se utiliza para permitir que el código del programa compilado como un archivo ELF se ejecute correctamente, independientemente de la dirección de memoria donde se carga el código o los datos del programa en tiempo de ejecución. [ 1 ]

Asigna símbolos en el código de programación a sus direcciones de memoria absolutas correspondientes para facilitar el Código Independiente de Posición (PIC) y los Ejecutables Independientes de Posición (PIE) [ 2 ] que se cargan [ 3 ] en una dirección de memoria diferente cada vez que se inicia el programa. La dirección de memoria en tiempo de ejecución, también conocida como dirección de memoria absoluta de variables y funciones, se desconoce antes de que se inicie el programa cuando se ejecuta el código PIC o PIE [ 4 ], por lo que no puede ser codificada de forma fija durante la compilación por un compilador .

La tabla de desplazamiento global se representa como las secciones .got y .got.plt en un archivo ELF [ 5 ] que se cargan en la memoria del programa al inicio. [ 5 ] [ 6 ] El enlazador dinámico del sistema operativo actualiza las reubicaciones de la tabla de desplazamiento global (símbolos a direcciones de memoria absolutas) al inicio del programa o cuando se accede a los símbolos. [ 7 ] Es el mecanismo que permite que las bibliotecas compartidas (.so) se reubiquen en una dirección de memoria diferente al inicio y evita conflictos de direcciones de memoria con el programa principal u otras bibliotecas compartidas, y para fortalecer el código del programa informático frente a la explotación. [ 8 ]

Referencias

  1. "Enlace dinámico" . refspecs.linuxfoundation.org .
  2. "Opciones de generación de código (usando la colección de compiladores GNU)" . gcc.gnu.org .
  3. "Cómo se ejecutan los programas: binarios ELF [ LWN.net ] " . lwn.net .
  4. "Tablas de desplazamiento global" . bottomupcs.sourceforge.net .
  5. 1 2 "Formato ejecutable y enlazable (ELF)" . stevens.netmeister.org .
  6. Wienand, Ian (10 de mayo de 2011). "PLT y GOT: la clave para compartir código y bibliotecas dinámicas" . Technovelty . Recuperado el 14 de abril de 2020 .
  7. Aichinger, Christian. "El formato ELF: cómo se ven los programas desde dentro" . Reflexiones de Christian Aichinger .
  8. Sidhpurwala, Huzaifa (28 de enero de 2018). "Endurecimiento de binarios ELF mediante reubicación de solo lectura (RELRO)" . Red Hat .