Skip to main content

Maghanap ng Mga Libro ng Libro ng Programa Gamit ang "ldd" Command

Paano kumita ng pera gamit ang cellphone (Kumita in 30secs!) (Abril 2025)

Paano kumita ng pera gamit ang cellphone (Kumita in 30secs!) (Abril 2025)
Anonim

Gamitin ang ldd utos upang ipakita ang mga nakabahaging mga aklatan na kinakailangan ng anumang ibinigay na programa - kapaki-pakinabang para sa ehersisyo kapag may nawawalang dependency. Inililista din ng command ang mga nawawalang function at bagay.

ldd Command Syntax

Obserbahan ang wastong syntax para sa command na ldd upang maiwasan ang mga error:

ldd OPTION … FILE …

Gumamit ng isa o higit pa sa mga magagamit na switch ng command na ldd, na ipinasok sa OPTION lugar sa utos sa itaas:

--help | i-print ang tulong na ito at lumabas --version | print na bersyon ng impormasyon at exit -d, --data-relocs | proseso ng data relocations -r, --function-relocs | proseso ng data at pag-andar ng relokasyon -u, --unused | print hindi ginagamit mga direktang dependency -v, - ooose | i-print ang lahat ng impormasyon

Paano Gamitin ang ldd Command

Ipatupad ang sumusunod na utos upang makakuha ng karagdagang impormasyon tungkol sa isang programa:

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

Ipinapakita ng output ang impormasyon ng bersyon pati na rin ang mga landas at address sa mga nakabahaging mga aklatan, tulad nito:

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

Kung ang SO file ay hindi umiiral sa lahat, maaari mong mahanap ang nawawalang mga aklatan gamit ang sumusunod na command:

$ ldd -d path / to / program

Ang output ay katulad ng sumusunod:

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)

Huwag kailanman patakbuhin ang command ng ldd laban sa isang untrusted program dahil ang ldd ay maaaring aktwal na execute ito. Sa halip, gumamit ng isang mas ligtas na alternatibo na nagpapakita lamang ng direktang mga dependency at hindi ang buong puno ng dependency:

$ objdump -p / path / to / program | Kailangan ng grep

Paano Maghanap ng Path sa isang Application

Kailangan mong ibigay ang buong landas sa isang application kung gusto mong mahanap ang mga dependency nito sa ldd, na maaari mong gawin sa maraming paraan.

Halimbawa, ito ay kung paano mo mahanap ang path sa Firefox:

$ find / -name firefox

Ang problema sa command na mahanap, gayunpaman, ay hindi lamang ito ilista ang mga maipapatupad ngunit sa lahat ng dako na matatagpuan sa Firefox, tulad nito:

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

Ang diskarte na ito ay isang bit ng isang overkill at maaaring kailangan mong gamitin ang sudo utos upang itaas ang iyong mga pribilehiyo, kung hindi, malamang na makakuha ka ng maraming mga error na tinanggihan ng pahintulot.

Sa halip ay mas madali itong gamitin kung saan ang command upang makahanap ng landas ng isang application:

$ whereis firefox

Sa oras na ito ang output ay maaaring magmukhang ito:

/ usr / bin / firefox

/ etc / firefox

/ usr / lib / firefox

Ang kailangan mong gawin ngayon upang mahanap ang mga nakabahaging mga aklatan para sa Firefox ay i-type ang sumusunod na command:

$ ldd / usr / bin / firefox

Ang output mula sa command ay magiging ganito:

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)

Ang Linux-vdso.so.1 ay ang pangalan ng library at ang numero ng hex ay ang address kung saan ang library ay mai-load sa memorya.

Mapapansin mo sa marami sa iba pang mga linya na ang simbolo => ay sinusundan ng landas. Ito ang landas sa pisikal na binary; ang numero ng hex ay ang address kung saan mai-load ang library.