Linux User-Space Loader
سؤال
أحتاج إلى القيام بشيء غير عادي إلى حد ما: قم بتنفيذ ELF قابل للتنفيذ يدويًا. أي تحميل جميع الأقسام في الأماكن الصحيحة ، والاستعلام الرئيسي () واستدعاءها (والتنظيف ثم). سيتم ربط التنفيذ بشكل ثابت ، لذلك لن تكون هناك حاجة لربط المكتبات. أنا أيضًا أتحكم في العنوان الأساسي ، لذلك لا تقلق بشأن الصراعات المحتملة.
إذن ، هل هناك أي مكتبات لذلك؟
لقد وجدت Oskit و liboskit_exec ، ولكن يبدو أن المشروع قد مات منذ عام 2002.
أنا موافق على أخذ أجزاء من المشاريع (احترام التراخيص ، بالطبع) وتكييفها مع حاجتي ، لكنني لأنني لم أكمل في عالم Linux ، حتى أنني لا أعرف أين أجد تلك الأجزاء! قون
ملاحظة. أحتاج ذلك لمنصة الذراع.
UPD حسنًا ، يبدو أن مسألة تحميل ELFS تتطلب بعض المعرفة الجيدة عنها (تنهد) ، لذلك أنا خارج لقراءة بعض المواصفات والأدلة. وأعتقد أنني سألتزم بونيك/رابط وليبلفش. شكرا يا رفاق!
النتائج الملخصة:
- Libelf: http://directory.fsf.org/project/libelf/
- Elfsh و Libelfsh (الآن جزء من Eresi): http://www.eresi-project.org/
- Elfio (مكتبة قزم أخرى): http://sourceforge.net/projects/elfio/
- Oskit و Liboskit_exec (عفا عليها الزمن): http://www.cs.utah.edu/flux/oskit/
- bionic/linker: https://android.googlesource.com/platform/bionic
المحلول
سريع 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!)