crt0
crt0 (المعروف أيضًا باسم c0 ) عبارة عن مجموعة من إجراءات بدء التشغيل المرتبطة ببرنامج C ، والتي تُنفذ أي عمليات تهيئة مطلوبة قبل استدعاء الدالة الرئيسية للبرنامج. بعد اكتمال الدالة الرئيسية، يعود التحكم إلى crt0، الذي يستدعي دالة المكتبة exit(0) لإنهاء العملية.
الشكل والاستخدام
يأخذ Crt0 عادةً شكل ملف كائن يسمى crt0.o ، وغالبًا ما يكون مكتوبًا بلغة التجميع ، والذي يتم تضمينه تلقائيًا بواسطة الرابط في كل ملف تنفيذي يقوم بإنشائه. [ 1 ]
تحتوي مكتبة crt0 على الأجزاء الأساسية لمكتبة وقت التشغيل . ولذلك، فإنّ العمل الذي تؤديه يعتمد على مُصرّف البرنامج ونظام التشغيل وتطبيق مكتبة C القياسية . [ 1 ] بالإضافة إلى عمليات التهيئة المطلوبة من قِبل البيئة ومجموعة الأدوات ، يمكن لـ crt0 تنفيذ عمليات إضافية يُحددها المبرمج، مثل تنفيذ الدوال البانية العامة في C++ ودوال C التي تحمل سمة ((constructor)) الخاصة بـ GCC . [ 2 ] [ 3 ]
يشير اختصار "crt" إلى "وقت تشغيل لغة C"، ويرمز الصفر إلى "البداية". مع ذلك، عند تجميع البرامج باستخدام GCC، يُستخدم هذا الاختصار أيضًا للغات أخرى غير لغة C. تتوفر إصدارات بديلة من crt0 لحالات استخدام خاصة؛ على سبيل المثال، لتمكين تحليل الأداء باستخدام gprof ، يجب تجميع البرامج باستخدام gcrt0 بدلاً من ذلك. [ 4 ]
مثال crt0.s
هذا المثال مخصص لنظام Linux x86-64 مع بناء جملة AT&T ، بدون وقت تشغيل C فعلي.
.نص.globl _start_start: # _start هي نقطة الدخول المعروفة للرابط xor %ebp , %ebp # فعليًا RBP := 0، علامة نهاية إطارات المكدس mov ( %rsp ), %edi # الحصول على argc من المكدس (ممتد ضمنيًا إلى 64 بت) lea 8 ( %rsp ), %rsi # أخذ عنوان argv من المكدس lea 16 ( %rsp , %rdi , 8 ), %rdx # أخذ عنوان envp من المكدس xor %eax , %eax # وفقًا لواجهة التطبيق الثنائية والتوافق مع icc، استدعاء الدالة الرئيسية # %edi و%rsi و%rdx هي الوسائط الثلاثة (أول اثنين منها قياسيان في لغة C) للدالة الرئيسيةmov %eax , %edi # نقل القيمة المُعادة من الدالة main إلى الوسيط الأول للدالة _exit xor %eax , %eax # وفقًا لواجهة التطبيق الثنائية (ABI) والتوافق مع icc call _exit # إنهاء البرنامجانظر أيضاً
مراجع
- 1 2 "تهيئة وقت تشغيل لغة C، crt0.o" . embecosm.com . 2010. تم الاطلاع عليه بتاريخ 30-12-2013 .
- ↑ "تهيئة البرنامج: إنشاء مكتبة C" . osdev.org . 2014-02-25 . تم الاطلاع عليه بتاريخ 2014-04-21 .
- ↑ "استدعاء المُنشئات العامة" . osdev.org . 2014-04-08 . تم الاطلاع عليه بتاريخ 2014-04-21 .
- ↑ "تجميع برنامج للتحليل: GNU gprof" . sourceware.org . تم الاطلاع عليه بتاريخ 30-12-2013 .
روابط خارجية
- مكتبة C القياسية
- عائلة لغات البرمجة C
