stringtranslate.com

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 necesario antes de llamar a la función principal del programa . Una vez que la función principal se completa, el control vuelve a crt0, que llama a la función de biblioteca exit(0) para finalizar el proceso.

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 construye. [1]

crt0 contiene las partes más básicas de la biblioteca de 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 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 "tiempo de ejecución de C" y el cero significa "el comienzo". Sin embargo, cuando se compilan programas 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_inicio _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 llame a main # %edi, %rsi, %rdx son los tres argumentos (de los cuales los dos primeros son estándar de C) para main                         mov %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 programa          

Véase también

Referencias

  1. ^ ab "La inicialización del entorno de ejecución de C, crt0.o". embecosm.com . 2010 . Consultado el 30 de diciembre de 2013 .
  2. ^ "Inicialización de programas: creación de una biblioteca C". osdev.org . 2014-02-25 . Consultado el 2014-04-21 .
  3. ^ "Llamada a constructores globales". osdev.org . 2014-04-08 . Consultado el 2014-04-21 .
  4. ^ "Compilación de un programa para la elaboración de perfiles: GNU gprof". sourceware.org . Consultado el 30 de diciembre de 2013 .

Enlaces externos