Gamit ang "ldd" Command sa Linux

Maaaring gamitin ang command na ldd upang ipakita sa iyo ang mga nakabahaging aklatan na kinakailangan ng anumang naibigay na programa.

Ito ay kapaki-pakinabang para sa ehersisyo kapag may nawawalang dependency at maaaring magamit sa listahan ng mga nawawalang mga function at mga bagay.

ldd Command Syntax

Ito ang tamang syntax kapag ginagamit ang command na ldd:

ldd [OPTION] ... FILE ...

Narito ang magagamit na mga command switch ldd na maaaring maipasok sa [OPTION] na puwesto sa itaas na utos:

--Tulungin i-print ang tulong at paglabas na ito - Ang bersyon ng pag-print ng bersyon ng paglabas at exit -d, - data-relocs proseso ng relocation ng data -r, -function-relocs proseso ng data at pag-andar ng relocation -u, -unused print unused direct dependencies -v, - i-print ang lahat ng impormasyon

Paano Gamitin ang ldd Command

Maaari mong gamitin ang sumusunod na command upang makakuha ng karagdagang impormasyon mula sa anumang command na ldd:

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)

Mahalaga: Huwag kailanman patakbuhin ang command ng ldd laban sa isang untrusted program dahil ang command ay maaaring aktwal na execute ito. Ito ay isang mas ligtas na alternatibo na nagpapakita lamang ng mga direktang dependency at hindi ang buong dependency tree: 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 nais mong mahanap ang mga dependency nito sa ldd, na maaari mong gawin ng maraming mga paraan.

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

hanapin / -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:

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

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

kung saan ang 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.