De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda
Un volcado hexadecimal de un cargador ejecutable en modo real

En informática , el código ejecutable , un archivo ejecutable o un programa ejecutable , a veces simplemente denominado ejecutable o binario , hace que una computadora "realice tareas indicadas de acuerdo con instrucciones codificadas ", [1] en contraposición a un archivo de datos que debe ser interpretado ( analizado ) por un programa para ser significativo.

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

Generación de archivos ejecutables [ editar ]

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 se puede especificar en lenguaje ensamblador , que sigue siendo legible por humanos y 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 - archivo de objeto de algún tipo; el proceso equivalente en el código fuente del lenguaje ensamblador se llama ensamblador . Varios archivos de objeto están vinculados para crear el ejecutable. Los archivos de objeto, ejecutables o no, generalmente se almacenan en un formato contenedor , como el formato ejecutable y enlazable (ELF) o el ejecutable portátil (PE), que es específico del sistema operativo . [3] Esto le 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 generalmente 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 , manejo de excepciones , llamadas a constructores y destructores estáticos, etc.) e interacciones con el sistema operativo, en particular pasando argumentos, entorno y devolviendo 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 se configura y apaga llamando a la biblioteca en tiempo de ejecución . [4]

Por lo tanto, los archivos ejecutables normalmente contienen un código de máquina adicional significativo más allá del generado directamente a partir del código fuente específico. En algunos casos, es conveniente 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 del enlazador, 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. [5]

Ejecución [ editar ]

Para que el sistema lo ejecute (como un sistema operativo, firmware o cargador de arranque ), un archivo ejecutable debe ajustarse a la interfaz binaria de aplicación (ABI) del sistema. [6] 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í. En interfaces más complicadas, los archivos ejecutables tienen metadatos adicionales que especifican un punto de entrada separado . Por ejemplo, en ELF, el punto de entrada se especifica en el e_entrycampo del encabezado , que especifica la dirección de memoria (virtual) en la que comenzar la ejecución. En GCC ( Colección de compiladores GNU ) este campo lo establece el enlazador en función de la_start símbolo.

Ver también [ editar ]

  • Comparación de formatos de archivos ejecutables

Referencias [ editar ]

  1. ^ "ejecutable" . Diccionario en línea de Merriam-Webster . Merriam-Webster . Consultado el 19 de julio de 2008 .
  2. ^ "Instrucciones de la máquina" . GeeksforGeeks . 2015-11-03 . Consultado el 18 de septiembre de 2019 .
  3. ^ "Capítulo 4: Archivos de objeto" . refspecs.linuxbase.org . Consultado el 18 de septiembre de 2019 .
  4. ^ Fisher, Tim. "Lista de extensiones de archivos ejecutables" . lifewire.com . Consultado el 18 de septiembre de 2019 .
  5. ^ McKellar, Jessica (16 de marzo de 2010). "¡Hola desde un mundo sin libc! (Parte 1)" .
  6. Boelen, Michael (15 de mayo de 2019). "El 101 de los archivos ELF en Linux: Comprensión y análisis - Linux ..." Auditoría de Linux . Consultado el 18 de septiembre de 2019 .

Enlaces externos [ editar ]

  • Formato de archivo EXE en lo que es