stringtranslate.com

Ejecutable

Un volcado hexadecimal de un cargador ejecutable en modo real . 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 programa para que sea significativo. [3]

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

Generación de archivos ejecutables.

Los archivos ejecutables se pueden codificar a mano en lenguaje de máquina, aunque es mucho más conveniente desarrollar software como código fuente en un lenguaje de alto nivel que los humanos puedan entender fácilmente. En algunos casos, el código fuente puede especificarse en lenguaje ensamblador , que sigue siendo legible por 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 archivo de código de máquina no ejecutable ( archivo objeto de algún tipo); el proceso equivalente en código fuente en lenguaje ensamblador se llama ensamblaje . Varios archivos objeto están vinculados para crear el ejecutable. Los archivos objeto, ejecutables o no, generalmente se almacenan en un formato contenedor , como el formato ejecutable y vinculable (ELF) o el ejecutable portátil (PE), que es específico del sistema operativo . [5] Esto le da estructura al código de máquina generado, por ejemplo dividiéndolo en secciones como .text (código ejecutable), .data (variables estáticas y globales inicializadas) y .rodata (datos de solo lectura, como constantes y instrumentos de cuerda).

Los archivos ejecutables generalmente también incluyen un sistema de ejecución , que implementa características del lenguaje de ejecución (como programación de tareas , manejo de excepciones , llamada a constructores y destructores estáticos, etc.) e interacciones con el sistema operativo, en particular, pasar argumentos, entorno y devolver un estado de salida. , junto con otras funciones de inicio y apagado, como la liberación de recursos como 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, la vinculación y la carga. En C, esto se puede hacer omitiendo el tiempo de ejecución habitual y, en su lugar, especificando explícitamente un script vinculador, que genera el punto de entrada y maneja el inicio y el apagado, como llamar mainal inicio y devolver el estado de salida al kernel al final. [7]

Ejecución

Para que el sistema lo ejecute (como un sistema operativo , firmware [ cita requerida ] o cargador de arranque ), un archivo ejecutable debe ajustarse a 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ándolo 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 iniciar la ejecución. [9] En la Colección de compiladores GNU , este campo lo establece el vinculador según el _startsímbolo. [10]

Ver también

Referencias

  1. ^ Celovi, Paul (2002). Libro de cocina de FreeBSD integrado. Elsevier . págs. 108, 187-188. ISBN 1-5899-5004-6. Consultado 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, Juan Pablo (2007). Administración de Windows en la línea de comandos para Windows Vista, Windows 2003, Windows XP y Windows 2000. John Wiley & Sons . pag. 24.ISBN _ 978-0-470-04616-6. Consultado el 6 de marzo de 2023 .
  4. ^ "Instrucciones de la máquina". Geeks para Geeks . 2015-11-03 . Consultado el 18 de septiembre de 2019 .
  5. ^ "Capítulo 4: Archivos de objetos". refspecs.linuxbase.org . Consultado el 18 de septiembre de 2019 .
  6. ^ Pescador, Tim. "Lista de extensiones de archivos ejecutables". lifewire.com . Consultado el 18 de septiembre de 2019 .
  7. ^ McKellar, Jessica (16 de marzo de 2010). "¡Hola desde un mundo libre de libc! (Parte 1)".
  8. ^ Smith, James E .; Nair, Ravi (16 de mayo de 2005). "La arquitectura de las máquinas virtuales". Computadora . 38 (5): 33–34. doi :10.1109/MC.2005.173.
  9. ^ Rusling, David A. (1999). "Capítulo 4 - Procesos". El núcleo de Linux . segundo. 4.8.1 – ELF . Consultado el 6 de marzo de 2023 .
  10. ^ Página, Daniel (2009). Una introducción práctica a la arquitectura informática. Springer Ciencia + Medios comerciales . págs. 415–416. ISBN 978-1-84882-255-9. Consultado el 6 de marzo de 2023 .

enlaces externos