Skip to main content

البحث عن مكتبات مشتركة في البرنامج باستخدام الأمر "ldd"

نظام جاليلو الدرس الثاني المهندس ليث جواد مصلح اتاحية باستخدام الامر A (قد 2025)

نظام جاليلو الدرس الثاني المهندس ليث جواد مصلح اتاحية باستخدام الامر A (قد 2025)
Anonim

استخدم ال LDD أمر لإظهار المكتبات المشتركة المطلوبة من قبل أي برنامج معين - مفيدة للعمل بها عندما يكون هناك تبعية في عداد المفقودين. يسرد الأمر أيضًا الوظائف المفقودة والكائنات.

قيادة الأوامر ldd

مراقبة بناء الجملة الصحيح لأمر ldd لتجنب الأخطاء:

ldd OPTION … FILE …

استخدم واحد أو أكثر من مفاتيح تبديل الأمر ldd المتاحة ، المدرجة في اختيار بقعة في الأمر أعلاه:

- مساعدة اطبع هذه المساعدة والخروج - النسخه طباعة معلومات الإصدار والخروج -d، --data-relocs | عمليات نقل البيانات العملية -r ، - الوظائف- relocs | بيانات عملية وترحيل وظيفة -u ، - غير مستخدم | طباعة التبعيات المباشرة غير المستخدمة -v ، --verbose | طباعة جميع المعلومات

كيفية استخدام القيادة ldd

تنفيذ الأمر التالي للحصول على مزيد من المعلومات حول أحد البرامج:

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

يعرض الإخراج معلومات الإصدار بالإضافة إلى المسارات والعناوين إلى المكتبات المشتركة ، مثل هذا:

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

إذا كان ملف SO غير موجود على الإطلاق ، فيمكنك العثور على المكتبات المفقودة باستخدام الأمر التالي:

$ ldd -d path / to / program

الإخراج مشابه لما يلي:

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

ومع ذلك ، فإن مشكلة الأمر find ، هي أنها لن تقوم فقط بإدراج الملف القابل للتنفيذ ولكن في كل مكان يوجد فيه Firefox ، كما يلي:

  • /etc/skel/.mozilla/firefox
  • / الوطن // مخبأ / موزيلا / فايرفوكس
  • /home//.mozilla/firefox
  • / البيرة / بن / فايرفوكس
  • / البيرة / ليب / فايرفوكس
  • / البيرة / ليب / فايرفوكس / فايرفوكس

يعتبر هذا الأسلوب قليلاً من المبالغة ، وقد تحتاج إلى استخدام الأمر sudo لرفع الامتيازات الخاصة بك ، وإلا فمن المحتمل أن تحصل على الكثير من أخطاء رفض الأذونات.

بدلاً من ذلك ، من الأسهل بكثير استخدام الأمر whereis للعثور على مسار التطبيق:

$ whereis 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 هو اسم المكتبة والرقم السداسي هو العنوان الذي سيتم تحميل المكتبة فيه في الذاكرة.

ستلاحظ على العديد من الأسطر الأخرى التي يتبعها الرمز => مسار. هذا هو المسار إلى ثنائي المادية ؛ رقم سداسي عشرية هو العنوان حيث سيتم تحميل المكتبة.