crt0 (también conocido como c0 ) es un conjunto de rutinas de inicio de ejecución integradas en unprograma C que realizan cualquier trabajo de inicialización necesario antes de llamar a la función principal del programa . Una vez que la función principal finaliza, el control regresa a crt0, que llama a la función de la biblioteca exit(0) para terminar el proceso.
Formulario 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. [ 1 ]
crt0 contiene las partes más básicas de la biblioteca de tiempo de ejecución . Por lo tanto, 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 definidas por el programador, como ejecutar constructores globales de C++ y funciones de C que llevan el atributo ((constructor)) de GCC . [ 2 ] [ 3 ]
"crt" significa "C runtime" (tiempo de ejecución de C), y el cero indica "el principio". Sin embargo, cuando los programas se compilan con GCC, también se utiliza para lenguajes distintos de C. Existen versiones alternativas de crt0 para escenarios de uso especiales; por ejemplo, para habilitar la creación de perfiles con gprof , los programas deben compilarse con gcrt0 . [ 4 ]
Ejemplo crt0.s
Este ejemplo es para Linux x86-64 con sintaxis AT&T , sin un entorno de ejecución 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 (extendido implícitamente 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) para mainmov %eax , %edi # transfiere el retorno de main al primer argumento de _exit xor %eax , %eax # por ABI y compatibilidad con icc call _exit # finaliza el programaVéase también
Referencias
- 1 2 "La inicialización del 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 . 25 de febrero de 2014. Consultado el 21 de abril de 2014 .
- ↑ "Llamando a constructores globales" . osdev.org . 8 de abril de 2014. Consultado el 21 de abril de 2014 .
- ↑ "Compilación de un programa para la creación de perfiles: GNU gprof" . sourceware.org . Consultado el 30 de diciembre de 2013 .
Enlaces externos
- crt0.o vs crt1.o
- Inicio de programas Linux x86
- ¡Hola desde un mundo sin libc! (Parte 1) , 16 de marzo de 2010
- glibc x86_64 inicio.S
- Biblioteca estándar de C
- Familia de lenguajes de programación C