Solaris Elfedit: هل هناك شيء مشابه لـ Linux؟ (محرر مكتبة مشتركة)؟

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

سؤال

Linux: هناك طريقة لتحرير مكتبة مشتركة مجمعة؟

على وجه التحديد أنا أبحث عن كيفية إضافة DT_SYMBOLIC flag على مكتبة مشتركة تم تجميعها بالفعل؟

هنا لماذا أسأل هذا:

تطبيقنا يتكون من

  • مكتباتنا الخاصة (ثابتة libxxx.a)
  • بعض libs الطرف الثالث (مشتركة ثنائية فقط المكتبات libyy.so)

كل شيء على ما يرام مع التطبيق حتى الآن.

الآن لقد استبدلت منطقتنا ثابتة* LIBXXX.A المكتبات مع إصدارات المكتبات المشتركة (libxxx.so).

كل شيء يجمع وروابط على ما يرام.

ولكن عندما أقوم بتشغيل التطبيق الآن ، يبدأ الأمر ويقوم بالكثير من المعالجة المتوقعة - ثم يتعطل في مكان ما في نصف الطريق. يوضح Backtrace GDB أن الحادث يحدث في بعض المكتبات المشتركة بين الطرف الثالث.

لقد بحثت حول SOF ووجدت مقالة مثيرة للاهتمام هنا.

النصيحة التي أشير إليها هي

... add the DT_SYMBOLIC flag to the dynamic section ...

على الرغم من أنني أشك في أنه سيساعد حقًا ، أعتقد أنه قد يستحق المحاولة.

أي أفكار كيف يمكنني إضافة DT_SYMBOLIC flag على مكتبة مشتركة تم تجميعها بالفعل/مرتبطة؟

بيئة: Debian Lenny 64bit with G ++ v4.2.4 و BinuTils V20.

تعديل: على سولاريس ، يوجد برنامج يسمى elfedit. هل هناك شيء مشابه لـ Linux؟

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

المحلول

وفي الوقت نفسه ، وجدت L أداة تسمى elfsh. إنها قذيفة تفاعلية لفحص وتحرير كائنات ELF والثنائيات والمكتبات المشتركة.

انظر هنا للحصول على صفحة المشروع: http://www.eresi-project.org

لسوء الحظ ، لا يبدو أنه مستقر للغاية. لقد واجهت الكثير من الحوادث في الداخل elfsh بحد ذاتها.

نصائح أخرى

إذا كان هذا مجرد علم ، فإن النهج المؤلم هو تعديل رأس قزمك مع محرر سداسي.

ولكن إذا تحطمت طرف ثالث ليب ، فسوف أنظر شخصيًا إلى الطرف الآخر من الأشياء: ما الذي تغير حول ترتيب تحميل المكتبة بسبب الانتقال إلى المشاركة.

LDD

و

تصدير ld_debug = libs

هل أصدقائك هنا.

dlopen () ing libs المشتركة الخاصة بك بعد تحميل وقت التشغيل قد يحمل libs الطرف الثالث قد يكون كافيا.

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