Загрузчик программы и компоновщик времени выполнения одинаковы? - PullRequest
0 голосов
/ 11 декабря 2011

Загрузчик программы и компоновщик времени выполнения в Linux одинаковы? Я имею в виду ld-linux.so, который действует как загрузчик во время запуска программы, а также как динамический компоновщик, когда вызывается dlopen()?

Ответы [ 2 ]

3 голосов
/ 12 декабря 2011

Я думаю, что они очень похожи, но не совсем одинаковы.

Библиотека /lib/libdl.so (или /lib/x86_64-linux-gnu/libdl.so.2 в моей системе) (содержащая dlopen и dlsym) является своего родакод заглушки или клея или оболочка, использующая некоторую часть /lib/ld-linux.so.2 (или /lib64/ld-linux-x86-64.so.2), но она не содержит те же символы, которые вы можете проверить с помощью nm -D.

Определенно dlopen и динамическогоЗагрузчик делает очень похожие вещи: mmap -ing сегменты и интерпретация порядка перемещения.См. эту ссылку и книгу компоновщиков и загрузчиков levine

Просмотрите исходный код Gnu Libc как dl-runtime.c etc

1 голос
/ 11 декабря 2011

Загрузчик программы и компоновщик времени выполнения в Linux одинаковы?

Да, они есть.Это также верно для любой другой платформы ELF .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...