على Linux ، ما الذي يمكن أن يتسبب في انبعاث dlopen؟

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

  •  01-10-2019
  •  | 
  •  

سؤال

لدي مكتبة من أصول مشكوك فيها تم تحديدها بواسطة file كـ 32 بت قابلة للتنفيذ. ومع ذلك ، عندما أحاول ذلك dlopen على آلة Centos 4.4 32 بت ، ينتهي dlopen مع SIGFPE. بالتأكيد إذا كان هناك خطأ ما في تنسيق الثنائي بعد ذلك dlopen يجب أن تتعامل مع خطأ؟

لذا فإن السؤال هو: ما هي أنواع المشاكل التي يمكن أن تتسبب في انبعاث dlopen؟

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

المحلول

بعض الأسباب المحتملة هي:

  1. تقسيم من الصفر (استبع هذا مع GDB)
  2. عدم تطابق الهندسة المعمارية (هل قمت بتجميع DSO بنفسك على نفس الهندسة المعمارية؟ أم أنها مصنوعة مسبقًا؟)
  3. مشاكل التوافق ABI (تحميل DSO تم تصميمه لتوزيعة Linux واحدة على واحدة مختلفة).

هنا هي مناقشة مثيرة للاهتمام بشأن توليد التجزئة في تنسيق ELF في أنظمة GNU حيث يمكن أن يتسبب عدم تطابق ABI في SIGFPE على الأنظمة عندما تخلط وتطابق DSOs غير مبنية على هذا النظام/النظام.

قم بتشغيل GDB مقابل التنفيذ الخاص بك مع:

]$ gdb ./my_executable
(gdb) run

عندما يتعطل البرنامج ، احصل على خلفية مع

(gdb) bt

إذا انتهى المكدس do_lookup_x () بعد ذلك ، من المحتمل أن تكون لديك نفس المشكلة ويجب أن تتأكد من أن DSO صحي أصول مشكوك فيها لذلك ربما تكون المشكلة مشكلة ABI مماثلة للمشكلة الموصوفة.

احصل على مكتبة غير مبنية / قابلة للتنفيذ! ؛)

حظا طيبا وفقك الله

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