Английская Википедия:Crt0

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Шаблон:Short description Шаблон:Lowercase title Шаблон:Program execution

Шаблон:Mono (also known as Шаблон:Mono) is a set of execution startup routines linked into a C program that performs any initialization work required before calling the program's main function.

Form and usage

Crt0 generally takes the form of an object file called Шаблон:Mono, often written in assembly language, which is automatically included by the linker into every executable file it builds.[1]

Шаблон:Mono contains the most basic parts of the runtime library. As such, the exact work it performs depends on the program's compiler, operating system and C standard library implementation.[1] Beside the initialization work required by the environment and toolchain, Шаблон:Mono can perform additional operations defined by the programmer, such as executing C++ global constructors and C functions carrying GCC's Шаблон:Mono attribute.[2][3]

"crt" stands for "C runtime", and the zero stands for "the very beginning". However, when programs are compiled using GCC, it is also used for languages other than C. Alternative versions of Шаблон:Mono are available for special usage scenarios; for example, to enable profiling with gprof, programs must be compiled with Шаблон:Mono instead.[4]

Example crt0.s

This example is for Linux x86-64 with AT&T syntax, without an actual C runtime.

.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

See also

Шаблон:Portal

References

Шаблон:Reflist

External links