पुस्तकालयों को ढूंढें एक बाइनरी के खिलाफ जुड़ा हुआ था


40

मुझे पता है कि एक कमांड है जो मुझे लिबास और संबंधित संस्करणों को सूचीबद्ध करता है, जिनके खिलाफ एक सॉफ्टवेयर लिंक किया गया था।

Ld या libtool के साथ कुछ?

लेकिन मैं अभी याद नहीं कर सकता। गूगल पर कुछ समय बिताया लेकिन उपयोगी कुछ भी नहीं आया।

अद्यतन
ldd <binary> , लिनक्स पर मदद मिलेगी ( से @ Ernelli जबकि मैंने पाया कि) otool -L <binary>MacOS एक्स पर कुछ ऐसा ही


जवाबों:


41

द्विआधारी-निष्पादन की कोशिश करें

उदाहरण:

~$ ldd /bin/bash
    linux-gate.so.1 =>  (0x00606000)
    libncurses.so.5 => /lib/libncurses.so.5 (0x00943000)
    libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0x00c5d000)
    libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x003e9000)
    /lib/ld-linux.so.2 (0x00a41000)

डांग! इसलिए मेरी पहली कोशिश सही थी। बस इसे मेरे मैक पर स्थापित करने की आवश्यकता है ताकि यह पूरी तरह से कमांड को जानता हो ;-)
er4z0r

@ er4z0r: FYI करें, मैक ओएस बीएसडी है, लिनक्स नहीं
ग्रैविटी

6
आभार: आप सही हैं। जबकि ldd linux पर मदद करेगा मैंने पाया कि 'ओटूल-एल <बाइनरी>' कुछ ऐसा ही करता है।
er4z0r

15

यह जानने के लिए कि इसे सीधे क्या चाहिए:

readelf -d APP | grep NEEDED

lddजैसा कि कहीं और उल्लेख किया गया है, सभी प्रत्यक्ष और अप्रत्यक्ष रूप से लिबास दिखाएगा - सब कुछ जिसकी जरूरत रनटाइम पर है। यह पूरी सूची नहीं हो सकती है, क्योंकि आप गतिशील रूप से dlopen () के साथ चीजों को खोल सकते हैं, लेकिन यह समय का 99% काम करना चाहिए।

ld और libtool का उपयोग संकलन / लिंक समय पर किया जाता है। आपके पास एक ऐप होने के बाद वे उपयोगी नहीं हैं।

EDIT मैं बाद के उत्तरों से देख सकता हूं जो आप OSX के बारे में पूछ रहे थे, लेकिन मैं लिनक्स उपकरणों पर अपने उत्तर को जोड़ना चाहता हूं:

एक बात जिसका मैं उल्लेख करना भूल गया, काफी समय पहले; आपने संस्करणों के बारे में पूछा। न तो lddहै और न ही readelf"कौन-सा संस्करण" सवाल का जवाब देंगे। वे आपको उस पुस्तकालय का फ़ाइल नाम बताएंगे, जिसकी आप तलाश कर रहे हैं, और नामकरण सम्मेलन में कुछ संस्करण जानकारी हो सकती है, लेकिन यह कुछ भी लागू नहीं करता है। प्रतीकों को संस्करणित किया जा सकता है, और आपको nmइन्हें देखने के लिए निम्न स्तर के बारे में बहुत कुछ करना होगा ,


9

दूसरा तरीका होगा कि आप objdump का उपयोग करें।

objdump -x "बाइनरी" | grep की आवश्यकता है

यह केवल इस बाइनरी के लिए सभी आवश्यक निर्भरता दिखाता है। बहुत उपयोगी।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.