отметили
2
человек
голосовать
2
человек
Релокации. Разбираемся, как Linux-программа находит функцию во время выполненияxakep.ru

В Linux программы используют динамические библиотеки, но из-за ASLR их точный адрес в памяти неизвестен до запуска. Механизмы PLT (таблица связывания процедур) и GOT (глобальная таблица смещений) решают эту проблему, подставляя реальные адреса функций во время выполнения.
PLT — это небольшие заглушки для каждой библиотечной функции, а GOT хранит указатели на их фактические адреса. При первом вызове функции происходит ленивое связывание: динамический линковщик вычисляет адрес и записывает его в GOT, после чего последующие вызовы идут напрямую.
Автор статьи показывает этот процесс на примере с утилитами
objdump, readelf и отладчиком GDB. Разбирается, как выглядит вызов printf до и после разрешения адреса, и какие записи появляются в GOT.Также затрагиваются релокации — записи в ELF-файле, которые сообщают линковщику, какие адреса нужно исправить. Это ключевой механизм для работы динамических библиотек и позиционно-независимого кода.
В итоге читатель получает полное понимание того, как Linux связывает вызовы функций с их памятью в рантайме.
Комментарии (0)
Чтобы комментировать, нужно войти.