كيف تسرد الوظائف المتاحة وما إلى ذلك الواردة داخل مكتبة مجمعة؟

StackOverflow https://stackoverflow.com/questions/392142

  •  23-08-2019
  •  | 
  •  

سؤال

كيف يمكنني تحديد ما إذا كانت وظيفة موجودة داخل مكتبة، أو قم بإدراج الوظائف في مكتبة مجمعة؟

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

المحلول

يمكنك استعمال ال نيلوم أمر لإدراج الرموز في المكتبات الثابتة.

nm -g -C <libMylib.a>

نصائح أخرى

بالنسبة إلى الثنائيات قزم، يمكنك استخدام الوراء

readelf -sW a.out | awk '$4 == "FUNC"' | c++filt

-s: قائمة الرموز-W: لا تقطع أسماء طويلة جدا

سيقوم الأمر AWK بعد ذلك بتصفية جميع الوظائف، وسيقوم FILT C ++ بتشغيلها. هذا يعني أنها ستحولها من مخطط تسمية داخلي حتى يتم عرضها في شكل الإنسان قابل للقراءة. يتم إخراج الأسماء المشابهة لهذا (مأخوذة من Bost.Filesystem Lib):

285: 0000bef0    91 FUNC    WEAK   DEFAULT   11 boost::exception::~exception()

بدون c ++ filt، يتم عرض الاسم كما _ZN5boost9exceptionD0Ev

لأدوات Microsoft، "link /dump /symbols <filename>"سوف أعطيك تفاصيل gory. ربما توجد طرق أخرى (أو خيارات) لإعطاء أسهل لقراءة القائمة.

تحت Linux / UNIX يمكنك استخدام objdump -T لإدراج الرموز المصدرة الموجودة في كائن معين. تحت ويندوز هناك dumpbin (IIRC. dumpbin /exports). لاحظ أن أسماء دالة C ++ يتم تشويشها من أجل السماح بالحمل الزائد.

تحرير: بعد رؤية codelogic أنسير تذكرت أن Objdump يفهم أيضا -C لأداء de-mangling.

استخدم هذا الأمر:

Objdump -T "مكتبة الخاص بك"

سيتم طباعة أكثر مما تريد - ليس فقط أسماء الوظائف، ولكن جدول الرمز بأكمله. تحقق من السمات المختلفة للرموز التي تحصل عليها، وسوف تكون قادرا على فرز الوظائف من المتغيرات والأشياء.

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