على Linux ، ما الذي يمكن أن يتسبب في انبعاث dlopen؟
سؤال
لدي مكتبة من أصول مشكوك فيها تم تحديدها بواسطة file
كـ 32 بت قابلة للتنفيذ. ومع ذلك ، عندما أحاول ذلك dlopen
على آلة Centos 4.4 32 بت ، ينتهي dlopen مع SIGFPE
. بالتأكيد إذا كان هناك خطأ ما في تنسيق الثنائي بعد ذلك dlopen
يجب أن تتعامل مع خطأ؟
لذا فإن السؤال هو: ما هي أنواع المشاكل التي يمكن أن تتسبب في انبعاث dlopen؟
المحلول
بعض الأسباب المحتملة هي:
- تقسيم من الصفر (استبع هذا مع GDB)
- عدم تطابق الهندسة المعمارية (هل قمت بتجميع DSO بنفسك على نفس الهندسة المعمارية؟ أم أنها مصنوعة مسبقًا؟)
- مشاكل التوافق ABI (تحميل DSO تم تصميمه لتوزيعة Linux واحدة على واحدة مختلفة).
هنا هي مناقشة مثيرة للاهتمام بشأن توليد التجزئة في تنسيق ELF في أنظمة GNU حيث يمكن أن يتسبب عدم تطابق ABI في SIGFPE على الأنظمة عندما تخلط وتطابق DSOs غير مبنية على هذا النظام/النظام.
قم بتشغيل GDB مقابل التنفيذ الخاص بك مع:
]$ gdb ./my_executable
(gdb) run
عندما يتعطل البرنامج ، احصل على خلفية مع
(gdb) bt
إذا انتهى المكدس do_lookup_x ()
بعد ذلك ، من المحتمل أن تكون لديك نفس المشكلة ويجب أن تتأكد من أن DSO صحي أصول مشكوك فيها لذلك ربما تكون المشكلة مشكلة ABI مماثلة للمشكلة الموصوفة.
احصل على مكتبة غير مبنية / قابلة للتنفيذ! ؛)
حظا طيبا وفقك الله