2015-12-11 2 views
1

Я пытаюсь понять, как работает динамический компоновщик 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.

ответ

0

Так я думал, что это называется только после запуска компоновщика и загрузил некоторые библиотеки

Это правильно.

Я считаю, функция вызывается еще до _dl_start

Это не правильно: _dl_fixup вызывается только после того, как _dl_start.

К сожалению, вы не указали какие-либо сведения о том, как вы пришли к неправильному выводу, поэтому невозможно сказать вам, где вы допустили ошибку, но вы сделали ошибку (хотя бы одну).

+1

Спасибо за ответ! Я связываю два фото о деталях, можете ли вы указать на мою ошибку? :) – liubenxi

Смежные вопросы