سؤال

هل هناك طريقة بسيطة وفعالة لمعرفة ذلك مرتبطا ديناميكيا ELF يفتقد مطلوبة. لذلك لتشغيل، كل ذلك من في داخل من برنامج C / C ++؟

أحتاج إلى برنامج مع وظيفة مماثلة إلى حد ما ldd, ، دون محاولة تنفيذ ELF لمعرفة التبعيات (التقى / غير مستاء) في النظام. ربما يسألون أداة Ld-linux.so عبر بعض المكتبة؟ (أنا مبتدئ في هذا الجزء من Linux =)

ملاحظة: قراءة شفرة المصدر ldd لم يكن مفيدا للغاية للنوايا: يبدو ذلك ldd في الواقع تفرج عملية أخرى وتنفيذ البرنامج.

إذا لم يكن من الممكن معرفة أن البرنامج يحتوي على تبعيات غير مستوفاة دون تنفيذها، فهل هناك طريقة، على الأقل، سرعان ما يسرد .so المطلوبة لذلك ELF كل ذلك من داخل برنامجي؟

شكرا مقدما =)

هل كانت مفيدة؟

المحلول

حسب LD.SO (8), ، وضع متغير البيئة LD_TRACE_LOADED_OBJECTS إلى سلسلة غير فارغة سوف تعطي ldd- مثل النتائج (بدلا من تنفيذ الثنائي أو المكتبة بشكل طبيعي).

setenv("LD_TRACE_LOADED_OBJECTS", "1", 1);
FILE *ldd = popen("/lib/libz.so");

نصائح أخرى

هل حاولت dlopen وظيفة؟ يمكنك استخدام هذا لتحميل مكتبة ديناميكية (أو لحالتك، إلى CKECK إذا كانت مكتبة يمكن تحميلها).

وجود قائمة من المكتبات اللازمة أكثر صعوبة، إلقاء نظرة handle_dynamic وظيفة في المصدر للعائلات

ماذا عن استخدام PTTRACE () لتتبع المكالمات المفتوحة () للعثور على كل ما يعتمده البرنامج على (ومع ذلك، يتضمن الإخراج ملفات، وليس فقط المكتبات) .or ربما تصفية الإخراج عن طريق البادئة اسم الملف "/ lib" يساعد وبعد

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top