LINUX.ORG.RU
ФорумTalks

как ядро ищет и загружает бинарники и библиотеки?

 , ,


1

2

по мотивам вот этого треда:

ссзб, зделал mv /* /anoter_folder как восстановить систему, переустановку не предлагать

    1. в каждом бинарнике записан путь к /lib64/ld-linux-x86-64.so.2 этот файл загружает бинарник?

не в каждой библиотеки есть запись /lib/ld-linux-*.so.*

root@phyboard-segin-imx6ul-2:~# strings /usr/lib/libmosquitto.so.2.0.11 | grep ld-linux
root@phyboard-segin-imx6ul-2:~# strings /lib/libc.so.6 | grep ld-linux
ld-linux-armhf.so.3
/lib/ld-linux-armhf.so.3
root@phyboard-segin-imx6ul-2:~# 
    1. для чего эта запись в файлах библиотек и почему ее нет в некоторых либах?
    1. как вообще происходит процесс загрузки библиотек?

ps: сори за тупняк, ничего не нашел в гугле

★★★

Последнее исправление: IvanR (всего исправлений: 1)

LD_LIBRARY_PATH is the default library path which is accessed to check for available dynamic and shared libraries. It is specific to linux distributions. It is similar to environment variable PATH in windows that linker checks for possible implementations during linking time.

zgen ★★★★★
()

Ядро никакие библиотеки не ищет. Этим занимается так называемый ELF interpreter — тот самый ld-linux.so. Путь до него прописан в каждом ELF’е. А он, в свою очередь, разбирает список динамического связывания в заголовках ELF и ищет указанные там библиотеки в трёх местах: в RPATH (это ещё одно поле в заголовке ELF), в $LD_LIBRARY_PATH и в путях из /etc/ld.so.conf.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

Путь до него прописан в каждом ELF’е

strings /usr/lib/libmosquitto.so.2.0.11 | grep ld-linux

не в каждом.

для чего он прописан в библиотеках? и почему не в каждых?

как-то не складывается полной картины, догадки какие-то

IvanR ★★★
() автор топика
Последнее исправление: IvanR (всего исправлений: 2)
Ответ на: комментарий от IvanR

Это просто glibc особенная, чтобы можно было вот так делать:

$ /lib/x86_64-linux-gnu/libc.so.6
GNU C Library (Debian GLIBC 2.28-10) stable release version 2.28.
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 8.3.0.
libc ABIs: UNIQUE IFUNC ABSOLUTE
For bug reporting instructions, please see:
<http://www.debian.org/Bugs/>.

INTERP важен только для бинарника, его использует ядро для первоначального запуска процесса. За загрузку всего остального для процесса отвечает уже загруженный интерпретатор.

ilammy ★★★
()
Ответ на: комментарий от IvanR

Поправка, в каждом ELF dynamic executable (написали выше). ELF dynamic shared objects загружаются уже существующим интерпретатором.

intelfx ★★★★★
()

ELF позволяет использовать один и тот же файл и как приложение и как библиотеку. musl, вроде, вообще указывает на себя в качестве интерпретатора (ld-linux это просто ссылка на libc). И как-то такие ссылки приводили в отношении ядра:

xaizek ★★★★★
()
Последнее исправление: xaizek (всего исправлений: 1)

По указанным аргументам ядра, если эта малаварь не в поддержке ядра.

burato ★★★★★
()
Ответ на: комментарий от Rupricht

qemu-user — это бинарный транслятор, он вообще может делать всё что хочет.

intelfx ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.