Как узнать список библиотек, которые используются программой(бинарём)?Какие библиотеки использует программа?
Есть собранный бинарь, надо узнать что он подтягивает для своей работы. Точно помню, что есть такая утилита на Linux, вот почему-то не могу найти.
Ответы (2 шт):
Если не знаем где лежит программа - ищем её
find / -name firefox //(или любое другое имя вашей программы)переходим в директорию с бинарём и запускаем утилиту
lddldd ./firefox
Вообще зависимость от библиотек на программерском сленге называется dependency
В хорошем случае зависимости даже динамические можно посмотреть через gdb genue debugger загружакшь прогу в отладчик и смотришь deps.
По нубский - тяп-ляп, ldd (list dynamic dependencies) даёт информацию о статический загруженных библиотеках.
Добавлено спустя. Вот пример догрузки на самом простейшем паскаль варианте под винду (добавлено просто для понимания как это вообще работает)
program Project1;
{$APPTYPE CONSOLE}
uses SysUtils, Windows;
// Данная функция динамический зависима от user32.dll
// Если ОС не сможет загрузить её динамический, то приложение даже не запустится.
// Это всё видит `ldd` в линуксе
// Тут есть жесткое правило для ос - внешняя user32dll по имени MessageBeep
function MessageBeep(uType: UINT): BOOL; stdcall; external 'user32.dll' name 'MessageBeep';
// А вот в этом варианте она даже не существует но догрузится после
// Это уже увидит отладчик. После выполнения операций с загрузкой SO файла
// По факту пофигу, есть-ли user32 в системе или нет, но приложение уже запущенно.
// И уже приложение решает, что делать с ошибкой если вдруг динамический, динамическая библиотека не загруженна.
type TMyFunc = function(uType: UINT): BOOL; stdcall;
var
hLib: DWORD;
ptrProc: TMyFunc;
begin
MessageBeep(0);
hLib := LoadLibrary('user32.dll');
ptrProc := GetProcAddress(hLib, 'MessageBeep');
ptrProc(0);
end.