Skip to main content

Programos bendrų bibliotekų ieškojimas naudojant "ldd" komandą

Anonim

Naudoti ldd komandą rodyti bendrai naudojamas bibliotekas, kurių reikia bet kuriai programai - naudinga dirbant, kai trūksta priklausomybės. Komanda taip pat nurodo trūkstamas funkcijas ir objektus.

ldd komandų sintaksė

Kad išvengtumėte klaidų, laikykitės tinkamos komandų ldd sintaksės:

ldd OPTION … FILE …

Naudokite vieną ar daugiau galimų ldd komandų jungiklių, įterptų į OPTION vietoje pirmiau pateiktoje komandoje:

--help | atspausdinkite šią pagalbą ir išeikite --versija | spausdinti versijos informaciją ir išeiti -d, -data-relocs | apdoroti duomenų perkėlimus -r, --funkcijos-relociai | apdoroti duomenis ir perkelti funkcijas -u, --unused | spausdinti nenaudojamas tiesiogines priklausomybes -v, --verbose | spausdinti visą informaciją

Kaip naudoti ldd komandą

Norėdami gauti daugiau informacijos apie programą atlikite šią komandą:

$ ldd -v / path / to / program / executable

Išėjimas rodo informaciją apie versiją, taip pat kelius ir adresus bendrai naudojamoms bibliotekoms, pvz .:

$ ldd libshared.so linux-vdso.so.1 => (0x00007fff26ac8000) libc.so.6 => /lib/libc.so.6 0x00007ff1df55a000) /lib64/ld-linux-x86-64.so.2 (0x00007ff1dfafe000)

Jei SO failas apskritai neegzistuoja, galite rasti trūkstamas bibliotekas naudodami šią komandą:

$ ldd-d kelias / į / programa

Rezultatas yra panašus į sekantį:

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)

Niekada paleiskite komandą ldd nepatikimoje programoje, nes "ldd" gali iš tikrųjų ją vykdyti. Vietoj to naudokite saugesnę alternatyvą, rodančią tik tiesiogines priklausomybes, o ne visą priklausomybės medį:

$ objdump-p / path / to / program | grep REIKIA

Kaip rasti kelią prie paraiškos

Jūs turite pateikti visą kelią prie programos, jei norite rasti priklausomybes nuo "ldd", kurį galite atlikti keliais būdais.

Pvz., Tai, kaip norite rasti kelią "Firefox":

$ find / -name firefox

Tačiau problema su komandą "find" reiškia, kad jis ne tik nurodo vykdomąjį failą, bet visur, kur yra "Firefox", kaip šis:

  • /etc/skel/.mozilla/firefox
  • / home / cache / mozilla / firefox
  • /home//.mozilla/firefox
  • / usr / bin / "Firefox"
  • / usr / lib / "Firefox"
  • / usr / lib / Firefox / Firefox

Šis metodas yra šiek tiek pernelyg stiprus, todėl gali prireikti naudoti komandą sudo, kad padidintumėte privilegijas, be to, galite gauti daug neteisingų leidimų.

Vietoje to, daug lengviau naudoti komandą "find", norėdami rasti programos kelią:

$ whereis firefox

Šį kartą produkcija gali atrodyti taip:

/ usr / bin / firefox

/ etc / firefox

/ usr / lib / firefox

Viskas, ką jums reikia padaryti dabar, kad galėtumėte rasti bendrąsias "Firefox" bibliotekas, įveskite šią komandą:

$ ldd / usr / bin / firefox

Komandos išvestis bus tokia:

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 yra bibliotekos pavadinimas, o šešioliktainis numeris - tai adresas, į kurį biblioteka bus įkelta į atmintį.

Daugelyje kitų eilučių pastebėsite, kad po simboliu => eina kelias. Tai kelias į fizinę dvejetainę; šešioliktainis numeris yra adresas, kuriame bus įkelta biblioteka.