crt0
crt0 (یا c0) مجموعه ای از روالهای شروع اجرا است که به یک برنامه زبان سی پیوند داده شده و هر مقداردهی اولیه مورد نیاز را قبل از فراخوانی تابع اصلی برنامه انجام می دهد. این مجموعه معمولا به شکل یک آبجکت فایل به نام crt0.o ظاهر میشود، که اغلب به زبان اسمبلی نوشته شده است و به طور خودکار توسط پیوند دهنده در هر فایل اجرایی که ایجاد می کند درج می شود. [۱]
crt0 شامل اساسی ترین قسمت های کتابخانه زمان اجرا است . بنابراین، کاری که دقیقا انجام میدهد به کامپایلر برنامه، سیستم عامل و نحوه پیادهسازی کتابخانه استاندارد C بستگی دارد.[۱] علاوه بر مقداردهی اولیه مورد نیاز محیط و زنجیره ابزار، crt0 می تواند عملیات دیگری که توسط برنامهنویس تعریف شدهاند را نیز انجام دهد، مانند اجرای سازنده های C ++ سراسری و توابع C که دارای ویژگی ((سازنده)) GCC هستند . [۲] [۳]
"crt" مخفف "C runtime" است و منظور از صفر ذکر شده در کنار آن "همان آغاز" است. با این حال ، این اصطلاح هنگامی که برنامه ها با استفاده از GCC کامپایل می شوند ، برای زبان های دیگری غیر از C نیز استفاده می شود. نسخه های جایگزین crt0 برای موارد خاص استفاده در دسترس هستند؛ به عنوان مثال، پروفایلر gprof باید برنامه های خود را با gcrt0 کامپایل کند . [۴]
مثال crt0.s[ویرایش]
این مثال برای لینوکس x86-64 با نحو AT&T است ، بدون یک زمان اجرای C
.text
.globl _start
_start: # _start is the entry point known to the linker
xor %ebp, %ebp # effectively RBP := 0, mark the end of stack frames
mov (%rsp), %edi # get argc from the stack (implicitly zero-extended to 64-bit)
lea 8(%rsp), %rsi # take the address of argv from the stack
lea 16(%rsp,%rdi,8), %rdx # take the address of envp from the stack
xor %eax, %eax # per ABI and compatibility with icc
call main # %edi, %rsi, %rdx are the three args (of which first two are C standard) to main
mov %eax, %edi # transfer the return of main to the first argument of _exit
xor %eax, %eax # per ABI and compatibility with icc
call _exit # terminate the program
همچنین ببینید[ویرایش]
- نقطه ورود
- سیستم زمان اجرا
منابع[ویرایش]
- ↑ ۱٫۰ ۱٫۱ "The C Runtime Initialization, crt0.o". embecosm.com. 2010. Retrieved 2013-12-30.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ "Program initialization: Creating a C library". osdev.org. 2014-02-25. Retrieved 2014-04-21.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ "Calling Global Constructors". osdev.org. 2014-04-08. Retrieved 2014-04-21.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ "Compiling a Program for Profiling: GNU gprof". sourceware.org. Retrieved 2013-12-30.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
لینک های خارجی[ویرایش]
- crt0.o vs crt1.o
- راه اندازی برنامه لینوکس x86
- سلام از دنیایی بدون ربا! (قسمت 1) ، 16 مارس 2010
- شروع glibc x86_64. س
This article "Crt0" is from Wikipedia. The list of its authors can be seen in its historical and/or the page Edithistory:Crt0. Articles copied from Draft Namespace on Wikipedia could be seen on the Draft Namespace of Wikipedia and not main one.