أي تمرين عملي لفهم كيفية تحميل البرنامج في الذاكرة وتنفيذه

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

  •  06-07-2019
  •  | 
  •  

سؤال

أشعر بالفضول بشأن الأشياء التي حدثت قبل استدعاء main()، مثل تحميل الملف القابل للتنفيذ في الذاكرة، والتحميل الديناميكي للمكتبة المشتركة.هل لديك أي اقتراحات حول كيفية فهم هذه الأشياء من خلال التدريب العملي؟

تشمل الأدوات والأشياء التي أعرفها وأستخدمها الآن ما يلي:

  • Strace
  • تفكيك
  • readelf
  • /proc/pid/map

ملحوظات:أنا أعرف الكتاب العظيم الروابط والرافعات, لكن التدريب العملي قد يعلمني أفضل من قراءة الكتاب.

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

المحلول

  • ال إل دي.سو صفحة الرجل يوثق العديد من متغيرات البيئة التي يمكن ضبطها إما لتعديل عملية الارتباط الديناميكي أو تقديم تفاصيل إضافية.

على سبيل المثال

LD_DEBUG=all cat </dev/null
  • يمكنك بسهولة الحصول على الكود المصدري لكل قطعة معنية - Linux kernel، الرابط الديناميكي، مكتبة C، رمز بدء التشغيل (crt0.o أو ما شابه).يمكنك البدء بدراسة الكود وإجراء التعديلات التجريبية.

نصائح أخرى

إذا كنت تريد التحقق من كيفية تعبئة الملف الثنائي والأقسام المختلفة منه، فأعتقد أن أفضل برنامج موجود على الإطلاق com.objdump.

اختر ما هو قابل للتنفيذ وقم بما يلي:


objdump -S <executable>  > myfile.S

تمرين جيد آخر سيكون:

  • إنشاء برنامج يستخدم مكتبة خارجية
  • ترجمة البرنامج باستخدام الارتباط الثابت
  • تشغيل البرنامج
  • أعد تسمية ملف المكتبة وتحقق من تشغيل البرنامج
  • ترجمة البرنامج باستخدام المكتبة المشتركة
  • أعد تسمية المكتبة وتحقق من تشغيل البرنامج

وهذا سوف يجيب على بعض أسئلتك حول ما يحدث تحت الستائر وكيف.

لقد وجدت رابطين مثيرين للاهتمام (على الأقل لنظام Linux) وأقصر قليلاً من الكتاب المذكور (Linkers and Loaders)

عندما أخذت فصلًا دراسيًا عن نظام التشغيل في الكلية، استخدمنا ناشوز.إنه ليس نظام تشغيل في حد ذاته, ، ولكنه نوع من "محاكاة" نظام التشغيل الذي يتم تشغيله في مساحة المستخدم.إنه مكتوب بلغة C++ ويمكنك تجميع الملفات التنفيذية التي يمكن لـ Nachos بعد ذلك تحميلها وتشغيلها.يمكنك اللعب بواجهة استدعاء النظام والتجربة بشكل عام بقدر ما تريد من خلال التلاعب بالرمز.

لقد قمنا بتشغيلها في مختبر Solaris، وواجهت بعض المشاكل في تشغيلها على Linux على جهازي الشخصي، ولكنها قد تكون لعبة ممتعة إذا كنت على استعداد للبحث في بعض التعليمات البرمجية.

أدرك أنه ربما يكون هذا كثيرًا لما تبحث عنه ولكن كتابة المجمّع والرابط الخاصين بك سيكون أمرًا تعليميًا للغاية.لقد فعلت ذلك عندما كنت في الكلية وأحببته.ربما استغرق الأمر 120 ساعة من العمل على ما أذكر لجعله يعمل على الأشياء الأساسية التي أردت أن يفعلها.أعتقد أن هذا المشروع جعلني على يقين من أن مهنة البرمجة كانت مناسبة لي أكثر من أي شيء آخر.

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