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

В Linux программы используют динамические библиотеки, но из-за ASLR их точный адрес в памяти неизвестен до запуска. Механизмы PLT (таблица связывания процедур) и GOT (глобальная таблица смещений) решают эту проблему, подставляя реальные адреса функций во время выполнения.

PLT — это небольшие заглушки для каждой библиотечной функции, а GOT хранит указатели на их фактические адреса. При первом вызове функции происходит ленивое связывание: динамический линковщик вычисляет адрес и записывает его в GOT, после чего последующие вызовы идут напрямую.

Автор статьи показывает этот процесс на примере с утилитами objdump, readelf и отладчиком GDB. Разбирается, как выглядит вызов printf до и после разрешения адреса, и какие записи появляются в GOT.

Также затрагиваются релокации — записи в ELF-файле, которые сообщают линковщику, какие адреса нужно исправить. Это ключевой механизм для работы динамических библиотек и позиционно-независимого кода.

В итоге читатель получает полное понимание того, как Linux связывает вызовы функций с их памятью в рантайме.

Комментарии (0)

Чтобы комментировать, нужно войти.