Βρείτε τις κοινόχρηστες βιβλιοθήκες ενός προγράμματος με την εντολή 'ldd'
Χρησιμοποιήστε το ldd εντολή για εμφάνιση των κοινόχρηστων βιβλιοθηκών που απαιτούνται από οποιοδήποτε δεδομένο πρόγραμμα. Η εντολή ldd είναι χρήσιμη για την επεξεργασία όταν λείπει μια εξάρτηση. ο εντολή παραθέτει επίσης συναρτήσεις και αντικείμενα που λείπουν.
ldd Σύνταξη εντολών
Παρατηρήστε το σωστό σύνταξη για την εντολή ldd για αποφυγή σφαλμάτων:
ldd [ΕΠΙΛΟΓΗ]... ΑΡΧΕΙΟ...
Χρησιμοποιήστε έναν ή περισσότερους από τους διαθέσιμους διακόπτες εντολών ldd, που έχουν εισαχθεί στο σημείο [OPTION] στην παραπάνω εντολή:
- --help: Εκτυπώστε αυτήν τη βοήθεια και βγείτε.
- --έκδοση: Εκτύπωση πληροφοριών έκδοσης και έξοδος.
- -d, --data-relocs: Επεξεργασία μετεγκαταστάσεων δεδομένων.
- -r, --function-relocs: Επεξεργασία δεδομένων και μετεγκαταστάσεων συναρτήσεων.
- -u, --unused: Εκτύπωση αχρησιμοποίητων άμεσων εξαρτήσεων.
- -v, --verbose: Εκτύπωση όλων των πληροφοριών.
Πώς να χρησιμοποιήσετε την εντολή ldd
Εκτελέστε την ακόλουθη εντολή για να λάβετε περισσότερες πληροφορίες σχετικά με ένα πρόγραμμα:
ldd -v /path/to/program/executable
Η έξοδος εμφανίζει πληροφορίες έκδοσης καθώς και διαδρομές και διευθύνσεις προς τις κοινόχρηστες βιβλιοθήκες, ως εξής:
libshared.έτσι
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 /path/to/program | grep ΧΡΕΙΑΖΕΤΑΙ

Πώς να βρείτε τη διαδρομή προς μια εφαρμογή
Πρέπει να δώσετε την πλήρη διαδρομή σε μια εφαρμογή εάν θέλετε να βρείτε τις εξαρτήσεις της με το ldd, κάτι που μπορείτε να κάνετε με διάφορους τρόπους.
Για παράδειγμα, αυτός είναι ο τρόπος εύρεσης της διαδρομής προς Firefox:
find / -name firefox
Το πρόβλημα με το βρείτε εντολή, ωστόσο, είναι ότι παραθέτει το εκτελέσιμο αρχείο και οπουδήποτε βρίσκεται ο Firefox, ως εξής:
/etc/skel/.mozilla/firefox
/home//cache/mozilla/firefox
/home//.mozilla/firefox
/usr/bin/Firefox
/usr/lib/Firefox
/usr/lib/Firefox/Firefox
Αυτή η προσέγγιση είναι λίγο υπερβολική και ίσως χρειαστεί να τη χρησιμοποιήσετε εντολή sudo για να αυξήσετε τα προνόμιά σας, διαφορετικά είναι πιθανό να λάβετε σφάλματα που δεν έχουν άδεια από τον άνθρωπο.
Αντίθετα, είναι πιο εύκολο να χρησιμοποιήσετε το όπου είναι η εντολή για να βρείτε τη διαδρομή μιας εφαρμογής:
όπου είναι το firefox
Αυτή τη φορά η έξοδος μπορεί να μοιάζει με αυτό:
/usr/bin/firefox
/etc/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 είναι το όνομα της βιβλιοθήκης και ο δεκαεξαδικός αριθμός είναι η διεύθυνση όπου φορτώνεται η βιβλιοθήκη στη μνήμη.
Σε πολλές γραμμές, το => σύμβολο ακολουθείται από μια διαδρομή. Αυτή είναι η διαδρομή προς το φυσικό δυαδικό. Ο δεκαεξαδικός αριθμός είναι η διεύθυνση όπου φορτώνεται η βιβλιοθήκη.