You can edit almost every page by Creating an account. Otherwise, see the FAQ.

crt0

از EverybodyWiki Bios & Wiki
پرش به:ناوبری، جستجو

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

همچنین ببینید[ویرایش]

منابع[ویرایش]

  1. ۱٫۰ ۱٫۱ "The C Runtime Initialization, crt0.o". embecosm.com. 2010. Retrieved 2013-12-30.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
  2. "Program initialization: Creating a C library". osdev.org. 2014-02-25. Retrieved 2014-04-21.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
  3. "Calling Global Constructors". osdev.org. 2014-04-08. Retrieved 2014-04-21.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
  4. "Compiling a Program for Profiling: GNU gprof". sourceware.org. Retrieved 2013-12-30.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.

لینک های خارجی[ویرایش]


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.



Read or create/edit this page in another language[ویرایش]