Как узнать какие библиотеки динамически линкуются
-
Mihael
Как узнать какие библиотеки динамически линкуются
Как узнать какие библиотеки динамически линкуются к выполнимому файлу (в частности, к elf'у)?
Наверняка есть подобные утилиты!
Не знаете нельзя ли в инете где-нибудь найти ресурс с статически слинкованными утилитами для линукса небольшого размера?
В частности нужны, какой-нить маленький шелл, вроде bourne shell, нбольшой mount и какой-нить lsdev bkb rdev.
Наверняка есть подобные утилиты!
Не знаете нельзя ли в инете где-нибудь найти ресурс с статически слинкованными утилитами для линукса небольшого размера?
В частности нужны, какой-нить маленький шелл, вроде bourne shell, нбольшой mount и какой-нить lsdev bkb rdev.
-
Barracuda
Re: Как узнать какие библиотеки динамически линкуются
Mihael
Цитата:
Как узнать какие библиотеки динамически линкуются к выполнимому файлу (в частности, к elf'у)?
Есть, звате её readelf. Поиграйтесь с параметрами и получите необходимую информацию. А чтобы показать всё, укажите readelf -a (если не обшибаюсь, то он и для библиотек инфу кажет).
Цитата:
какой-нить маленький шелл
Вроде в дистрибутиве RedHat такая есть. А вообще надо искать - так, на память, не помню.
Цитата:
Как узнать какие библиотеки динамически линкуются к выполнимому файлу (в частности, к elf'у)?
Есть, звате её readelf. Поиграйтесь с параметрами и получите необходимую информацию. А чтобы показать всё, укажите readelf -a (если не обшибаюсь, то он и для библиотек инфу кажет).
Цитата:
какой-нить маленький шелл
Вроде в дистрибутиве RedHat такая есть. А вообще надо искать - так, на память, не помню.
-
shurikan
Re: Как узнать какие библиотеки динамически линкуются
ooptimum
Цитата:
Я знаю, что приложение А импортирует функции Ф1, Ф2 и Ф3. Я хочу знать из какой библиотеки импортируется та или иная функция (т.е. Ф1 из Б, Ф2 из Г и Ф3 из В, например). Хочу это знать, не изучая самих библиотек Б, В и Г
Поизучать Б, В и Г (чуть-чуть) всё-таки придётся: mc - ну в смысле запускаем в любой панели переходим в каталог, где эти самые Б, В и/или Г. выбираем любой из них и жмём - то бишь просмотр - в смысле поиск. Ф1
Для .so файлов (как и для многих других бинарников) midnight commander в режиме просмотра открывает его экспортную часть.
Добавлено:
Можно и grep на библиотеки напустить
Цитата:
Я знаю, что приложение А импортирует функции Ф1, Ф2 и Ф3. Я хочу знать из какой библиотеки импортируется та или иная функция (т.е. Ф1 из Б, Ф2 из Г и Ф3 из В, например). Хочу это знать, не изучая самих библиотек Б, В и Г
Поизучать Б, В и Г (чуть-чуть) всё-таки придётся: mc - ну в смысле запускаем в любой панели переходим в каталог, где эти самые Б, В и/или Г. выбираем любой из них и жмём - то бишь просмотр - в смысле поиск. Ф1
Для .so файлов (как и для многих других бинарников) midnight commander в режиме просмотра открывает его экспортную часть.
Добавлено:
Можно и grep на библиотеки напустить
-
Guest
Re: Как узнать какие библиотеки динамически линкуются
Я что-то с его параметрами не разобрался... 
В редхате есть ash - он якобы маленький статически слинкованный 500КБ.

В редхате есть ash - он якобы маленький статически слинкованный 500КБ.
-
ruslandh
Re: Как узнать какие библиотеки динамически линкуются
ldd Name_file
ld Name_file
Добавлено:
ash - есть во многих системах.
Добавлено:
Поищи на
ld Name_file
Добавлено:
ash - есть во многих системах.
Добавлено:
Поищи на
http://www.unixware.ru/
слово mini-
ooptimum
Re: Как узнать какие библиотеки динамически линкуются
objdump, nm, readelf, ldd... Много всякой информации. Но как посмотреть что вот эта конкретная функция импортируется вот из этой конкретной библиотеки? В Win* это достаточно легко, а вот как этого добиться в линуксе?
-
ruslandh
Re: Как узнать какие библиотеки динамически линкуются
ooptimum
Можно и исходные коды этой библиотеки посмотреть
(Я вообще-то не врублюсь - в чем здесь проблема?)
Можно и исходные коды этой библиотеки посмотреть

(Я вообще-то не врублюсь - в чем здесь проблема?)
-
ooptimum
Re: Как узнать какие библиотеки динамически линкуются
ruslandh
Исходные коды не всегда доступны. Это - раз. Во-вторых, их надо смотреть, а это лениво.
Цитата:
не врублюсь - в чем здесь проблема?
А проблема в том, что я не знаю как добиться того, о чем спрашивал. А знать хочу. Описываю запрос немного по-иному -- ldd может сказать, что приложение A динамически линкует библиотеки Б, В и Г. Это хорошо, но мне этого не достаточно. Я знаю, что приложение А импортирует функции Ф1, Ф2 и Ф3. Я хочу знать из какой библиотеки импортируется та или иная функция (т.е. Ф1 из Б, Ф2 из Г и Ф3 из В, например). Хочу это знать, не изучая самих библиотек Б, В и Г, а имея доступ только к самому приложению А. В форточках это элементарно, а вот как этого добиться в линуксе я и пытаюсь узнать.
Исходные коды не всегда доступны. Это - раз. Во-вторых, их надо смотреть, а это лениво.
Цитата:
не врублюсь - в чем здесь проблема?
А проблема в том, что я не знаю как добиться того, о чем спрашивал. А знать хочу. Описываю запрос немного по-иному -- ldd может сказать, что приложение A динамически линкует библиотеки Б, В и Г. Это хорошо, но мне этого не достаточно. Я знаю, что приложение А импортирует функции Ф1, Ф2 и Ф3. Я хочу знать из какой библиотеки импортируется та или иная функция (т.е. Ф1 из Б, Ф2 из Г и Ф3 из В, например). Хочу это знать, не изучая самих библиотек Б, В и Г, а имея доступ только к самому приложению А. В форточках это элементарно, а вот как этого добиться в линуксе я и пытаюсь узнать.
-
Barracuda
Re: Как узнать какие библиотеки динамически линкуются
ooptimum
Ещё раз.
[pre]readelf -a | less[/pre]
Ещё раз.
[pre]readelf -a | less[/pre]
-
Barracuda
Re: Как узнать какие библиотеки динамически линкуются
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'.
На мой вопрос есть нормальный ответ в природе?
Еще раз... Ты думаешь я не смотрел, что дает 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'.
На мой вопрос есть нормальный ответ в природе?