Tabla de vinculación de proceso y tabla de compensación global

Estoy leyendo este artículo en PLT (tabla de vinculación de procesos) y GOT (tabla de compensación global) . Si bien el objective de PLT es claro para mí, todavía estoy confundido acerca de GOT. Lo que he entendido del artículo es que GOT solo es necesario para las variables declaradas como extern en una biblioteca compartida. Para las variables globales declaradas como static en un código de biblioteca compartida, no es obligatorio.

Es mi entendimiento correcto, o estoy completamente perdido el punto.

Tal vez su confusión es con el significado de extern . Dado que el enlace predeterminado es extern , cualquier variable declarada fuera del scope de la función sin la palabra clave static es extern .

El motivo por el que GOT es necesario se debe a que la dirección de las variables a las que accedió el código de la biblioteca compartida no se conoce en el momento en que se genera la biblioteca compartida. Depende de la dirección de carga en la que se carga la biblioteca (si la definición está en la biblioteca) o del código de terceros en el que está definida la variable (si la definición está en otra parte). Entonces, en lugar de poner la dirección en línea en el código, el comstackdor genera código para leer el GOT de la biblioteca compartida y luego carga la dirección del GOT en el tiempo de ejecución.

Si se sabe que la variable está definida dentro de la misma biblioteca compartida (ya sea porque es static o el atributo de visibilidad hidden o protected que utilizó), la dirección relativa al código en la biblioteca puede corregirse en el momento en que se genera el archivo de biblioteca compartida . En este caso, en lugar de realizar una búsqueda a través de GOT, el comstackdor genera código para acceder a la variable con el direccionamiento relativo del contador de progtwig. Esto es menos costoso tanto en tiempo de ejecución como en tiempo de carga (porque el proceso completo de búsqueda y reubicación de símbolos se puede omitir en el momento de la carga).