crt0 - crt0

crt0 (también conocido como c0 ) es un conjunto de rutinas de inicio de ejecución vinculadas a unprograma C que realiza cualquier trabajo de inicialización requerido antes de llamar a la función principal del programa.

Forma y uso

Crt0 generalmente toma la forma de un archivo objeto llamado crt0.o , a menudo escrito en lenguaje ensamblador , que el enlazador incluye automáticamente en cada archivo ejecutable que crea.

crt0 contiene las partes más básicas de la biblioteca en tiempo de ejecución . Como tal, el trabajo exacto que realiza depende del compilador del programa, el sistema operativo y la implementación de la biblioteca estándar de C. Al lado de la trabajo de inicialización requerido por el medio ambiente y la cadena de herramientas , crt0 puede realizar operaciones adicionales definidos por el programador, tales como la ejecución de C ++ globales constructores y funciones de C que lleva GCC 's () constructor () atributo.

"crt" significa "C runtime", y el cero significa "el comienzo mismo". Sin embargo, cuando los programas se compilan usando GCC, también se usa para lenguajes distintos de C. Hay versiones alternativas de crt0 disponibles para escenarios de uso especiales; por ejemplo, para habilitar la creación de perfiles con gprof , los programas deben compilarse con gcrt0 en su lugar.

Ejemplo crt0.s

Este ejemplo es para Linux x86-64 con sintaxis de AT&T , sin un tiempo de ejecución de C real.

.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

Ver también

Referencias

enlaces externos