سؤال

أحتاج إلى القيام بشيء غير عادي إلى حد ما: قم بتنفيذ ELF قابل للتنفيذ يدويًا. أي تحميل جميع الأقسام في الأماكن الصحيحة ، والاستعلام الرئيسي () واستدعاءها (والتنظيف ثم). سيتم ربط التنفيذ بشكل ثابت ، لذلك لن تكون هناك حاجة لربط المكتبات. أنا أيضًا أتحكم في العنوان الأساسي ، لذلك لا تقلق بشأن الصراعات المحتملة.

إذن ، هل هناك أي مكتبات لذلك؟

لقد وجدت Oskit و liboskit_exec ، ولكن يبدو أن المشروع قد مات منذ عام 2002.

أنا موافق على أخذ أجزاء من المشاريع (احترام التراخيص ، بالطبع) وتكييفها مع حاجتي ، لكنني لأنني لم أكمل في عالم Linux ، حتى أنني لا أعرف أين أجد تلك الأجزاء! قون

ملاحظة. أحتاج ذلك لمنصة الذراع.

UPD حسنًا ، يبدو أن مسألة تحميل ELFS تتطلب بعض المعرفة الجيدة عنها (تنهد) ، لذلك أنا خارج لقراءة بعض المواصفات والأدلة. وأعتقد أنني سألتزم بونيك/رابط وليبلفش. شكرا يا رفاق!

النتائج الملخصة:

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

المحلول

سريع apt-cache search وتقترح libelf1, libelfg0 و/أو libelfsh0. اعتقد ان elfsh قد يكون البرنامج (في حزمة الاسم نفسه) مثالًا عمليًا مثيرًا للاهتمام على كيفية الاستخدام libelfsh0.

لم أجرب أي شخص بنفسي ، لكنني آمل أن يكونوا مفيدين. حظا طيبا وفقك الله :-)

نصائح أخرى

يعمل Android من Google ، في تطبيق LIBC "Bionic" ، على محمل ELF الذي تم تعويضه تمامًا. إنه نظيف بشكل معقول ، وربما يكون مصدرًا أفضل من Gilbc إذا كنت تبحث عن شيء بسيط.

ألق نظرة على Libelf لقراءة التنسيق القابل للتنفيذ. سوف تواجه مشكلة مع هذا على ما أعتقد.

يبدو مثل ، حيث أنك لا تحتاج إلى مكتبات لأي شيء ، فلماذا لا تكون فقط mmap الخاصة بك ، قم بتعيين بيانات حول مناطق الذاكرة المختلفة و JMP/B في؟

لا أعرف ما إذا كان ARM لديه مكافئ NX-bit ، ولكن يستحق التحقق.

تحتوي هذه الأداة على محمل قزم: http://bitwagon.com/rtldi/rtldi.html

لقد قمت بإعادة استخدام الكود من RTLDI للحصول على elf Chainloader في مشروع آخر. الكود هنا: http://svn.gna.org/viewcvs/plash/trunk/chroot-jail/elf-chainloader/?rev=877 وهناك بعض الخلفية هنا: http://plash.beasts.org/wiki/Story16. (على ما يبدو ، يجب عليّ كسر هذه الروابط لأن StackOverflow لن يسمح لي بنشر الارتباط 1!)

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