Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Общий по Linux (http://forum.oszone.net/forumdisplay.php?f=9)
-   -   Как узнать какие библиотеки динамически линкуются (http://forum.oszone.net/showthread.php?t=14692)

Mihael 19-10-2002 07:01 79132

Как узнать какие библиотеки динамически линкуются к выполнимому файлу (в частности, к  elf'у)?
Наверняка есть подобные утилиты!
Не знаете нельзя ли в инете где-нибудь найти ресурс с статически слинкованными утилитами для линукса небольшого размера?
В частности нужны, какой-нить маленький шелл, вроде bourne shell, нбольшой mount и какой-нить lsdev bkb rdev.

Barracuda 19-10-2002 09:40 79133

Mihael
Цитата:

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

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

Guest 19-10-2002 10:04 79134

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

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

ruslandh 20-10-2002 07:17 79135

ldd Name_file
ld Name_file


Добавлено:

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


Добавлено:

Поищи на http://www.unixware.ru/  слово mini

ooptimum 25-01-2003 17:58 79136

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

ruslandh 26-01-2003 07:23 79137

ooptimum
Можно и исходные коды этой библиотеки посмотреть :)
(Я вообще-то не врублюсь - в чем здесь проблема?)

ooptimum 26-01-2003 15:25 79138

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

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

Barracuda 26-01-2003 16:19 79139

ooptimum
Ещё раз.
[pre]readelf -a <file_name> | less[/pre]

ooptimum 27-01-2003 08:09 79140

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'.

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

Guest 28-01-2003 16:44 79141

ooptimum
Тоды ой :)
Увы, но т.к. я не програмёр, то ничем больше помочь не могу :(
Залогиниться забыл

[s]Исправлено: Barracuda, 17:03 28-01-2003[/s]

shurikan 30-01-2003 04:12 79142

ooptimum
Цитата:

Я знаю, что приложение А импортирует функции Ф1, Ф2 и Ф3. Я хочу знать из какой библиотеки импортируется та или иная функция (т.е. Ф1 из Б, Ф2 из Г и Ф3 из В, например). Хочу это знать, не изучая самих библиотек Б, В и Г
Поизучать Б, В и Г (чуть-чуть) всё-таки придётся:
  • mc <ENTER> - ну в смысле запускаем
  • в любой панели переходим в каталог, где эти самые Б, В и/или Г.
  • выбираем любой из них и жмём <F3> - то бишь просмотр
  • <F7> - в смысле поиск. Ф1 <ENTER>

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

Добавлено:

Можно и grep на библиотеки напустить


Время: 22:26.

Время: 22:26.
© OSzone.net 2001-