Функция printf не имеет записи в секции .plt.dyn, поскольку она не вызывается напрямую из главной программы.
Когда главная программа вызывает функцию из разделяемой библиотеки, она сначала использует таблицу глобальных смещений (GOT) для получения адреса функции в разделяемой библиотеке. Затем она переадресует вызов функции через таблицу процедурных адресов (PLT), где сохраняется адрес PLT-загрузчика функции.
Таблица rela.plt содержит записи для функций, для которых требуется производить динамическую загрузку (lazy loading), так как адрес функции в разделяемой библиотеке еще неизвестен. Функция printf обычно вызывается напрямую из главной программы, поэтому ее адрес уже известен и не требуется производить динамическую загрузку.
Вместо этого, функция printf может иметь запись в таблице GOT, которая содержит адрес функции в разделяемой библиотеке, если она была использована в разделяемой библиотеке или другой части программы.