Зміст
- Знайдіть бібліотеки програм, якими користуються ваші програми
- Синтаксис команд ldd
- Як користуватися командою ldd
- Як знайти шлях до програми
Знайдіть бібліотеки програм, якими користуються ваші програми
Використовувати ldd команда для показу спільних бібліотек, необхідних будь-якій програмі. Команда ldd корисна для відпрацювання, коли існує відсутність залежності. Команда також містить список відсутніх функцій та об'єктів.
Синтаксис команд ldd
Дотримуйтесь належного синтаксису команди ldd, щоб уникнути помилок:
ldd [ОПЦІЯ] ... ФАЙЛ ...
Скористайтеся одним або кількома доступними командними перемикачами ldd, вставленими у місце [OPTION] у вищевказаній команді:
- --help: Роздрукуйте цю довідку та вийдіть.
- --версія: друк інформації про версію та вихід.
- -d, --data-relocs: обробка даних переселення.
- -r, --function-relocs: Обробляти дані та переміщувати функції.
- -u, - невикористовується: друкуйте невикористані прямі залежності.
- -v, --verbose: Роздрукувати всю інформацію.
Як користуватися командою ldd
Виконайте таку команду, щоб отримати додаткову інформацію про програму:
ldd -v / шлях / до / програми / виконується
Вихідні дані показують інформацію про версії, а також шляхи та адреси до бібліотек, що поділяються, таким чином:
libshared.so
linux-vdso.so.1 => (0x00007fff26ac8000)
libc.so.6 => /lib/libc.so.6 0x00007ff1df55a000)
/lib64/ld-linux-x86-64.so.2 (0x00007ff1dfafe000)
Якщо файл SO взагалі не існує, ви можете знайти відсутні бібліотеки за допомогою наступної команди:
ldd -d шлях / до / програма
Вихід аналогічний наступному:
linux-vdso.so.1 (0x00007ffc2936b000)
/home/gary/demo/garylib.so => not foundlibc.so.6 => usr / lib / libc.so.6 (0x00007fd0c6259000)
/lib64/ld-linux-x86-64.so.2 (0x00007fd0c65fd000)
Ніколи не запускайте команду ldd проти ненадійної програми, оскільки команда ldd може її виконати. Натомість використовуйте більш безпечну альтернативу, яка показує лише прямі залежності, а не все дерево залежностей:
objdump -p / шлях / до / програми | grep ПОТРІБНА
Як знайти шлях до програми
Вам потрібно надати повний шлях до програми, якщо ви хочете знайти його залежності за допомогою ldd, що ви можете зробити декількома способами.
Наприклад, ось як знайти шлях до Firefox:
знайти / -імен Firefox
Проблема команди find, однак, полягає в тому, що вона містить список виконуваних файлів і всюди, де знаходиться Firefox, як це:
/etc/skel/.mozilla/firefox
/ home // кеш / mozilla / firefox
/home//.mozilla/firefox
/ usr / bin / Firefox
/ usr / lib / Firefox
/ usr / lib / Firefox / Firefox
Такий підхід є дещо зайвим, і вам може знадобитися використовувати команду sudo, щоб підвищити свої привілеї, інакше ви, ймовірно, отримаєте помилки, позбавлені дозволу людиною.
Натомість простіше використовувати команду thatis, щоб знайти шлях програми:
де firefox
Цього разу вихід може виглядати приблизно так:
/ usr / bin / firefox
/ тощо / firefox
/ usr / lib / firefox
Потім, щоб знайти спільні бібліотеки для Firefox, введіть таку команду:
ldd / usr / bin / firefox
Вихід з команди буде приблизно таким:
linux-vdso.so.1 (0x00007ffff8364000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007feb9917a000)
libdl.so.2 => /usr/lib/libdl.so.2 (0x00007feb98f76000)
libstdc ++. so.6 => /usr/lib/libstdc++.so.6 (0x00007feb98bf4000)
libm.so.6 => /usr/lib/libm.so.6 (0x00007feb988f6000)
libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007feb986e0000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007feb9833c000)
/lib64/ld-linux-x86-64.so.2 (0x00007feb99397000)
Linux-vdso.so.1 - це ім'я бібліотеки, а шістнадцятковий номер - це адреса, куди бібліотека завантажується в пам'ять.
У багатьох рядках => символ слідує шляхом. Це шлях до фізичного бінарного. Шістнадцятковий номер - це адреса, де завантажується бібліотека.