stringtranslate.com

Ejecutable

Volcado hexadecimal de un cargador de modo real ejecutable . La primera columna consta de direcciones del primer byte de la segunda columna, que comprende bytes de datos en notación hexadecimal ( el byte menos significativo primero), y la última columna consta del formato ASCII correspondiente . [1]

En informática , un código ejecutable , un archivo ejecutable o un programa ejecutable , a veces denominado simplemente ejecutable o binario , hace que una computadora "realice tareas indicadas de acuerdo con instrucciones codificadas ", [2] a diferencia de un archivo de datos que debe ser interpretado ( analizado ) por un intérprete para que sea funcional. [3]

La interpretación exacta depende del uso. Tradicionalmente, "Instrucciones" se entiende como instrucciones de código de máquina para una CPU física . [4] En algunos contextos, un archivo que contiene instrucciones de scripting (como bytecode ) también puede considerarse ejecutable.

Generación de archivos ejecutables

Los archivos ejecutables se pueden codificar manualmente en lenguaje de máquina, aunque es mucho más conveniente desarrollar software como código fuente en un lenguaje de alto nivel que pueda ser fácilmente comprendido por humanos. En algunos casos, el código fuente se puede especificar en lenguaje ensamblador , que sigue siendo legible para humanos y, al mismo tiempo, está estrechamente asociado con las instrucciones del código de máquina.

El lenguaje de alto nivel se compila en un archivo de código de máquina ejecutable o en un código de máquina no ejecutable (un archivo objeto de algún tipo); el proceso equivalente en el código fuente del lenguaje ensamblador se denomina ensamblaje ). Se vinculan varios archivos objeto para crear el ejecutable. Los archivos objeto (ejecutables o no) normalmente se almacenan en un formato contenedor , como Executable and Linkable Format (ELF) o Portable Executable (PE), que es específico del sistema operativo . [5] Esto da estructura al código de máquina generado, por ejemplo, dividiéndolo en secciones como .text (código ejecutable), .data (variables globales y estáticas inicializadas) y .rodata (datos de solo lectura, como constantes y cadenas).

Los archivos ejecutables normalmente también incluyen un sistema de tiempo de ejecución , que implementa características del lenguaje de tiempo de ejecución (como la programación de tareas , el manejo de excepciones , la llamada a constructores y destructores estáticos, etc.) e interacciones con el sistema operativo, en particular el paso de argumentos, el entorno y la devolución de un estado de salida , junto con otras características de inicio y apagado, como la liberación de recursos como los identificadores de archivos . Para C, esto se hace vinculando el objeto crt0 , que contiene el punto de entrada real y realiza la configuración y el apagado llamando a la biblioteca de tiempo de ejecución . [6]

Por lo tanto, los archivos ejecutables normalmente contienen un código de máquina adicional significativo además del generado directamente a partir del código fuente específico. En algunos casos, es deseable omitir esto, por ejemplo, para el desarrollo de sistemas integrados, o simplemente para comprender cómo funcionan la compilación, el enlace y la carga. En C, esto se puede hacer omitiendo el entorno de ejecución habitual y, en su lugar, especificando explícitamente un script de enlace, que genera el punto de entrada y maneja el inicio y el apagado, como la llamada maina start y la devolución del estado de salida al núcleo al final. [7]

Ejecución

Para que un sistema (como un sistema operativo , un firmware [ cita requerida ] o un cargador de arranque ) pueda ejecutar un archivo ejecutable, debe cumplir con la interfaz binaria de aplicación (ABI) del sistema. En interfaces simples, un archivo se ejecuta cargándolo en la memoria y saltando al inicio del espacio de direcciones y ejecutándose desde allí. [8] En interfaces más complicadas, los archivos ejecutables tienen metadatos adicionales que especifican un punto de entrada independiente . Por ejemplo, en ELF, el punto de entrada se define en el e_entrycampo del encabezado, que especifica la dirección de memoria (virtual) en la que se debe iniciar la ejecución. [9] En la Colección de compiladores GNU , este campo lo establece el enlazador en función del _startsímbolo. [10]

Véase también

Referencias

  1. ^ Celovi, Paul (2002). Libro de recetas de FreeBSD integrado. Elsevier . págs. 108, 187–188. ISBN. 1-5899-5004-6. Recuperado el 6 de marzo de 2022 .
  2. ^ "ejecutable". Diccionario en línea Merriam-Webster . Merriam-Webster . Consultado el 19 de julio de 2008 .
  3. ^ Mueller, John Paul (2007). Administración de Windows en la línea de comandos para Windows Vista, Windows 2003, Windows XP y Windows 2000. John Wiley & Sons . p. 24. ISBN 978-0-470-04616-6. Consultado el 6 de marzo de 2023 .
  4. ^ "Instrucciones de máquina". GeeksforGeeks . 2015-11-03 . Consultado el 2019-09-18 .
  5. ^ "Capítulo 4: Archivos de objetos". refspecs.linuxbase.org . Consultado el 18 de septiembre de 2019 .
  6. ^ Fisher, Tim. "Lista de extensiones de archivos ejecutables". lifewire.com . Consultado el 18 de septiembre de 2019 .
  7. ^ McKellar, Jessica (16 de marzo de 2010). "¡Saludos desde un mundo sin libertades civiles! (Parte 1)".
  8. ^ Smith, James E. ; Nair, Ravi (16 de mayo de 2005). "La arquitectura de las máquinas virtuales". Computer . 38 (5): 33–34. doi :10.1109/MC.2005.173.
  9. ^ Rusling, David A. (1999). "Capítulo 4 – Procesos". El núcleo de Linux . sec. 4.8.1 – ELF . Consultado el 6 de marzo de 2023 .
  10. ^ Page, Daniel (2009). Introducción práctica a la arquitectura informática. Springer Science+Business Media . pp. 415–416. ISBN 978-1-84882-255-9. Consultado el 6 de marzo de 2023 .

Enlaces externos