stringtranslate.com

Глобальная таблица смещений

Глобальная таблица смещений ( GOT ) — это раздел памяти компьютерной программы (исполняемых файлов и разделяемых библиотек), используемый для обеспечения корректной работы кода компьютерной программы, скомпилированного в виде файла 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. ^ ab "Исполняемый и компоновочный формат (ELF)". stevens.netmeister.org .
  6. ^ Wienand, Ian (10 мая 2011 г.). "PLT и GOT — ключ к совместному использованию кода и динамическим библиотекам". Technovelty . Получено 14 апреля 2020 г. .
  7. ^ Айхингер, Кристиан. "Формат ELF - как программы выглядят изнутри". Мысли Кристиана Айхингера .
  8. ^ Sidhpurwala, Huzaifa (28 января 2018 г.). «Усиление защиты двоичных файлов ELF с помощью Relocation Read-Only (RELRO)». Red Hat .