Как узнать какие библиотеки динамически линкуются

Аватара пользователя
Mihael

Как узнать какие библиотеки динамически линкуются

Сообщение Mihael »

Как узнать какие библиотеки динамически линкуются к выполнимому файлу (в частности, к  elf'у)?

Наверняка есть подобные утилиты!

Не знаете нельзя ли в инете где-нибудь найти ресурс с статически слинкованными утилитами для линукса небольшого размера?

В частности нужны, какой-нить маленький шелл, вроде bourne shell, нбольшой mount и какой-нить lsdev bkb rdev.
Аватара пользователя
Barracuda

Re: Как узнать какие библиотеки динамически линкуются

Сообщение Barracuda »

Mihael


Цитата:



Как узнать какие библиотеки динамически линкуются к выполнимому файлу (в частности, к  elf'у)?



Есть, звате её readelf. Поиграйтесь с параметрами и получите необходимую информацию. А чтобы показать всё, укажите readelf -a (если не обшибаюсь, то он и для библиотек инфу кажет).


Цитата:



какой-нить маленький шелл



Вроде в дистрибутиве RedHat такая есть. А вообще надо искать - так, на память, не помню.
Аватара пользователя
shurikan

Re: Как узнать какие библиотеки динамически линкуются

Сообщение shurikan »

ooptimum


Цитата:



Я знаю, что приложение А импортирует функции Ф1, Ф2 и Ф3. Я хочу знать из какой библиотеки импортируется та или иная функция (т.е. Ф1 из Б, Ф2 из Г и Ф3 из В, например). Хочу это знать, не изучая самих библиотек Б, В и Г



Поизучать Б, В и Г (чуть-чуть) всё-таки придётся: mc - ну в смысле запускаем в любой панели переходим в каталог, где эти самые Б, В и/или Г. выбираем любой из них и жмём - то бишь просмотр - в смысле поиск. Ф1

Для .so файлов (как и для многих других бинарников) midnight commander в режиме просмотра открывает его экспортную часть.



Добавлено:



Можно и grep на библиотеки напустить
Аватара пользователя
Guest

Re: Как узнать какие библиотеки динамически линкуются

Сообщение Guest »

Я что-то с его параметрами не разобрался... Изображение



В редхате есть ash - он якобы маленький статически слинкованный 500КБ.
Аватара пользователя
ruslandh

Re: Как узнать какие библиотеки динамически линкуются

Сообщение ruslandh »

ldd Name_file

ld Name_file





Добавлено:



ash - есть во многих системах.





Добавлено:



Поищи на
http://www.unixware.ru/
 слово mini
Аватара пользователя
ooptimum

Re: Как узнать какие библиотеки динамически линкуются

Сообщение ooptimum »

objdump, nm, readelf, ldd... Много всякой информации. Но как посмотреть что вот эта конкретная функция импортируется вот из этой конкретной библиотеки? В Win* это достаточно легко, а вот как этого добиться в линуксе?
Аватара пользователя
ruslandh

Re: Как узнать какие библиотеки динамически линкуются

Сообщение ruslandh »

ooptimum

Можно и исходные коды этой библиотеки посмотреть Изображение

(Я вообще-то не врублюсь - в чем здесь проблема?)
Аватара пользователя
ooptimum

Re: Как узнать какие библиотеки динамически линкуются

Сообщение ooptimum »

ruslandh

Исходные коды не всегда доступны. Это - раз. Во-вторых, их надо смотреть, а это лениво.


Цитата:



не врублюсь - в чем здесь проблема?



А проблема в том, что я не знаю как добиться того, о чем спрашивал. А знать хочу. Описываю запрос немного по-иному -- ldd может сказать, что приложение A динамически линкует библиотеки Б, В и Г. Это хорошо, но мне этого не достаточно. Я знаю, что приложение А импортирует функции Ф1, Ф2 и Ф3. Я хочу знать из какой библиотеки импортируется та или иная функция (т.е. Ф1 из Б, Ф2 из Г и Ф3 из В, например). Хочу это знать, не изучая самих библиотек Б, В и Г, а имея доступ только к самому приложению А. В форточках это элементарно, а вот как этого добиться в линуксе я и пытаюсь узнать.
Аватара пользователя
Barracuda

Re: Как узнать какие библиотеки динамически линкуются

Сообщение Barracuda »

Barracuda

Еще раз... Ты думаешь я не смотрел, что дает readelf? Хорошо, вот пример. Squid есть у тебя? Выполняем команду:

readelf -a `which squid`

и читаем ее вывод. У себя я среди прочего вижу, что необходимы следующие библиотеки:


Цитата:



0x00000001 (NEEDED)                     Shared library: [libcrypt.so.1]

0x00000001 (NEEDED)                     Shared library: [libm.so.6]

0x00000001 (NEEDED)                     Shared library: [libresolv.so.2]

0x00000001 (NEEDED)                     Shared library: [libnsl.so.1]

0x00000001 (NEEDED)                     Shared library: [libc.so.6]



Но, мля, как мне посмотреть какая именно функция импортируется, скажем, из libcrypt.so.1? Если ты имеешь в виду секцию '.dynsym', то там такой информации нет. Там все входы имеют вид типа 'func_name@GLIBC_2.0'.



На мой вопрос есть нормальный ответ в природе?
Ответить

Вернуться в «Общий по Linux»