Глобальная таблица смещений ( GOT ) — это раздел памяти компьютерной программы (исполняемых файлов и разделяемых библиотек), используемый для обеспечения корректной работы кода компьютерной программы, скомпилированного в виде файла ELF , независимо от адреса памяти, куда загружен код или данные программы во время выполнения. [1]
Он сопоставляет символы в программном коде с соответствующими им абсолютными адресами памяти для упрощения позиционно-независимого кода (PIC) и позиционно-независимых исполняемых файлов (PIE) [2] , которые загружаются [3] в другой адрес памяти каждый раз при запуске программы. Адрес памяти времени выполнения, также известный как абсолютный адрес памяти переменных и функций, неизвестен до запуска программы при запуске кода PIC или PIE [4], поэтому не может быть жестко закодирован во время компиляции компилятором .
Глобальная таблица смещений представлена в виде разделов .got и .got.plt в файле ELF [5] , которые загружаются в память программы при запуске. [5] [6] Динамический компоновщик операционной системы обновляет перемещения глобальной таблицы смещений (символов в абсолютные адреса памяти) при запуске программы или при доступе к символам. [7] Это механизм, который позволяет перемещать разделяемые библиотеки (.so) на другой адрес памяти при запуске и избегать конфликтов адресов памяти с основной программой или другими разделяемыми библиотеками, а также защищать код компьютерной программы от эксплуатации. [8]