Я пытаюсь понять, как работает динамический компоновщик glibc. Я знаю, что _dl_fixup вызывается в _dl_runtime_resolve и решает проблемы с перемещением. Поэтому я думал, что это вызвано только после запуска компоновщика и загрузки некоторых библиотек. Но когда я выполняю некоторую работу над печатью, я обнаружил, что функция вызывается еще до _dl_start. Это сбивает с толку: почему это называется? Какую работу он сделал?Почему _dl_fixup вызывается перед началом динамического компоновщика?
Я выполнил некоторые работы по печати, функция работает с такими символами, как strncpy, fopen, fread64 и т. Д., Но имя объекта (l-> l_name) кажется нулевым.
I add print sentences in _dl_start and _dl_fixup
I make glibc and test the ld.so, I found "_dl_fixup" appears before and after "_dl_start"
К сожалению, чтобы связать изображения в проводном образом, я могу отправить только два ..
Я использую GDB для отладки компоновщика, и я думаю, что GDB сам использовал _dl_fixup для выполните некоторые задачи. Если я не использовал gdb, _dl_fixup вызывается только после _dl_start.
Спасибо за ответ! Я связываю два фото о деталях, можете ли вы указать на мою ошибку? :) – liubenxi