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 de objeto llamado crt0.o , a menudo escrito en lenguaje ensamblador , que el enlazador incluye automáticamente en cada archivo ejecutable que crea. [1]
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. [1] Además del trabajo de inicialización requerido por el entorno 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. [2] [3]
"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 a C.Versiones alternativas de crt0 están 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. [4]
Ejemplo crt0.s
Este ejemplo es para Linux x86-64 con sintaxis de AT&T , sin un tiempo de ejecución de C real.
.texto.globl _start_start: # _start es el punto de entrada conocido por el enlazador xor % ebp , % ebp # efectivamente RBP: = 0, marca el final de los marcos de pila mov ( % rsp ), % edi # obtiene argc de la pila (implícitamente extendido a cero a 64 bits) lea 8 ( % rsp ), % rsi # toma la dirección de argv de la pila lea 16 ( % rsp , % rdi , 8 ), % rdx # toma la dirección de envp de la pila xor % eax , % eax # por ABI y compatibilidad con icc call main #% edi,% rsi,% rdx son los tres argumentos (de los cuales los dos primeros son estándar de C) a main mov % eax , % edi # transferir la devolución de principal al primer argumento de _exit xor % eax , % eax # por ABI y la compatibilidad con ICC llamada _exit # terminar el programa
Ver también
Referencias
- ^ a b "La inicialización en tiempo de ejecución de C, crt0.o" . embecosm.com . 2010 . Consultado el 30 de diciembre de 2013 .
- ^ "Inicialización del programa: creación de una biblioteca C" . osdev.org . 2014-02-25 . Consultado el 21 de abril de 2014 .
- ^ "Llamando a constructores globales" . osdev.org . 2014-04-08 . Consultado el 21 de abril de 2014 .
- ^ "Compilar un programa para la creación de perfiles: GNU gprof" . sourceware.org . Consultado el 30 de diciembre de 2013 .