Вопрос

Есть ли простой и эффективный способ узнать, что данный динамически связанный ELF отсутствует необходимый для его запуска .so, все из внутри программы C/C++?

Мне нужна программа с чем-то похожим функционалом, как ldd, не пытаясь выполнить ELF чтобы выяснить (удовлетворенные/неудовлетворенные) зависимости в системе.Возможно, спросить утилиту ld-linux.so через какую-нибудь библиотеку?(Я новичок в этой части Linux =)

ПРИМЕЧАНИЕ:читая исходный код ldd не очень помогло моим намерениям:Кажется, что ldd на самом деле создает другой процесс и выполняет программу.

Если невозможно узнать, что программа имеет неудовлетворенные зависимости, не выполняя ее, есть ли способ хотя бы быстро составить список необходимых для этого .so ELF все из моей программы?

Заранее спасибо =)

Это было полезно?

Решение

Согласно ld.so(8), установка переменной среды LD_TRACE_LOADED_OBJECTS в непустую строку даст ldd-подобные результаты (вместо обычного выполнения двоичного файла или библиотеки).

setenv("LD_TRACE_LOADED_OBJECTS", "1", 1);
FILE *ldd = popen("/lib/libz.so");

Другие советы

Попытался ли ты dlopen функция?вы можете использовать это для загрузки динамической библиотеки (или, в вашем случае, для проверки возможности загрузки библиотеки).

Иметь список необходимых библиотек сложнее, взгляните на handle_dynamic функция включена источник чтения

А как насчет использования ptrace() для отслеживания всех вызовов open(), чтобы найти все, от чего зависит программа (однако выходные данные включают файлы, а не только библиотеки). Или, может быть, помогает фильтрация вывода по префиксу в имени файла «/lib». .

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top