Таблица глобального смещения - Global Offset Table

В Таблица глобального смещения, или же ПОЛУЧИЛ, является разделом компьютерная программа (исполняемые файлы и разделяемые библиотеки) память, используемая для включения программного кода компьютера, скомпилированного как ELF файл в пробег правильно, независимый адреса памяти, где код программы или данные загружен во время выполнения.[1]

Это карты символы в программном коде к их соответствующим абсолютные адреса памяти облегчить Позиционно-независимый код (PIC) и позиционно-независимые исполняемые файлы (PIE)[2] которые загружены[3] к другой адрес памяти каждый раз при запуске программы. Адрес памяти времени выполнения, также известный как абсолютный адрес памяти переменных и функций, неизвестен до запуска программы при запуске кода PIC или PIE.[4] поэтому не может быть жестко закодирован во время компиляции компилятор.

Глобальная таблица смещения представлена ​​в виде разделов .got и .got.plt в файле ELF.[5] которые загружаются в память программы при запуске.[5][6] Операционная система динамический компоновщик используется для обновления глобальной таблицы смещений переезд (символ в абсолютные адреса памяти) при запуске программы или при обращении к символам.[7]Это механизм, который позволяет общие библиотеки (.so) для перемещения на другой адрес памяти при запуске и предотвращения конфликтов адресов памяти с основной программой или другими разделяемыми библиотеками, а также для усиления компьютерный программный код от эксплуатации.[8]

Рекомендации

  1. ^ «Динамическое связывание». refspecs.linuxfoundation.org.
  2. ^ «Параметры генерации кода (с использованием коллекции компиляторов GNU)». gcc.gnu.org.
  3. ^ «Как запускаются программы: двоичные файлы ELF [LWN.net]». lwn.net.
  4. ^ «Таблицы глобального смещения». bottomupcs.sourceforge.net.
  5. ^ а б «Исполняемый и связываемый формат (ELF)». stevens.netmeister.org.
  6. ^ Винанд, Ян (10 мая 2011 г.). «PLT и GOT - ключ к совместному использованию кода и динамическим библиотекам». Техновинка. Получено 14 апреля 2020.
  7. ^ Айхингер, Кристиан. «Формат ELF - как программы выглядят изнутри». Мысли Кристиана Айхингера.
  8. ^ Сидхпурвала, Хузайфа (28 января 2018 г.). «Укрепление бинарных файлов ELF с помощью Relocation Read-Only (RELRO)». Красная шляпа.