| EXE | ||
|---|---|---|
|
| ||
|
| ||
| Desarrollador | ||
| Microsoft-IBM, Otros | ||
| Información general | ||
| Extensión de archivo |
.exe | |
| Tipo de MIME | application/vnd.microsoft.portable-executable | |
| Número mágico |
4D 5A (MZ) | |
| Tipo de formato | Ejecutable | |
| Estándar(es) | De facto por Microsoft | |
| Formato abierto |
| |
En el ámbito de la informática .exe (de la abreviación del inglés executable, que se traduce en ejecutable) es una extensión que se refiere a un archivo ejecutable de código reubicable, es decir, sus direcciones de memoria son relativas. Los sistemas operativos que utilizan de forma nativa este formato son DOS, Microsoft Windows, OS/2.
El formato de archivos EXE fue introducido en marzo de 1983, en la versión 2.0 de MS-DOS (la versión anterior solo podía ejecutar archivos COM, cuyas diferencias con los EXE se aclaran más adelante) y sigue siendo utilizado en la actualidad en las últimas versiones de Microsoft Windows, Windows 7, Windows 8, Windows 8.1, Windows 10 y Windows 11
De este software y a las nuevas posibilidades que abrían los hardwares más recientes. A continuación se lista esta evolución en orden cronológico:
Los ficheros EXE constan de una cabecera seguida de los segmentos definidos en el código fuente. Los datos de la cabecera son utilizados por el sistema operativo para realizar las inicializaciones necesarias para el correcto funcionamiento del programa, aunque dicha estructura no forma parte de la imagen final del programa en memoria. El contenido de la cabecera de un fichero EXE es el siguiente:
Ejecutable portable de 69 bits
Existen dos formas de crear un archivo de tipo EXE. Una es usando un compilador que pueda crear este tipo de archivos (lo cual no significa específicamente que tiene que ser para la plataforma donde se ejecutará, véase Compilador cruzado). La otra forma es ensamblando un código fuente del lenguaje Assembler y luego enlazando el código objeto resultante de la tarea anterior.
Fuera del ámbito de la programación también existen programas que generan ejecutables EXE para tareas específicas. Ejemplos de estos son el compresor WinZip, el Microsoft Powerpoint y el Adobe Flash.
Para revisar el funcionamiento de un programa se realiza la tarea llamada depuración (en inglés: debugging).
A continuación se detallan la realización estas tareas para programas de tipo EXE.
Compilación es el proceso por el cual se traduce un conjunto de llamado código fuente a código objeto. Normalmente se utiliza el término compilado para referirse a la tarea de compilación en conjunto al proceso de enlazado, ya que la mayoría (por no decir todos) de los compiladores realizan por defecto ambas tareas en conjunto, al menos que se especifique que se desea únicamente obtener el código objeto.
A continuación se expone un ejemplo de como se compila un programa escrito en el Lenguaje de programación C usando el compilador GCC del proyecto MinGW desde la línea de comandos:
| Archivo: ejemplo.c | En la línea de comandos |
|---|---|
#include <stdio.h>
int main(void){
printf("¡Hola, mundo!\n");
return 0;
}
|
C:\>gcc ejemplo.c -o ejemplo.exe
C:\>ejemplo.exe
¡Hola, mundo!
C:\>
|
El término ensamblado refiere al proceso de compilación (sin enlazado) de un código fuente específicamente escrito en Assembler. En este caso para poder obtener un ejecutable es necesario realizar el enlazado en forma separada (algunos de los compiladores más modernos del lenguaje Assembler realizan en ensamblado y enlazado en conjunto).
Él terminó enlazado refiere al proceso en el que se convierte el código objeto en un archivo ejecutable. A continuación se expone un ejemplo de como se compila un programa escrito en el lenguaje Assembler usando el ensamblador TASM y enlazador TLINK desde la línea de comandos:
| Archivo: ejemplo.asm | En la línea de comandos |
|---|---|
.model small
.stack 64
.data
msg db 0ADh,'¡Hola, mundo!',0Dh,0Ah,24h
.code
mov ax,@data
mov ds,ax
mov ah,9
lea dx,msg
int 21h
mov ax,4C00h
int 21h
end
|
C:\>tasm ejemplo.asm
Turbo Assembler Version 4.0
Copyright (c) 1988, 1993 Borland International
Assembling file: ejemplo.asm
Error messages: None
Warning messages: None
Passes: 1
Remaining memory: 408k
C:\>tlink ejemplo.obj
Turbo Link Version 6.00
Copyright (c) 1992, 1993 Borland International
C:\>ejemplo.exe
¡Hola, mundo!
C:\>
|
La principal diferencia es que el formato EXE no restringe el tamaño del ejecutable, en cambio el COM está restringido como máximo a ocupar un solo segmento de memoria (un espacio de memoria de 64 kB); además hay que incluir los 256 bytes que ocupa el PSP. Este límite fue dado en una época en la que esta cantidad de espacio era más que suficiente para poder realizar cualquier clase de tarea, pero con el paso del tiempo este límite terminó siendo absurdo (hoy en día gran parte de los programas de computadoras ocupan miles de veces más espacio). De todas formas es posible hacer que un programa COM pueda extender este límite usando el enunciado SEGMENT AT.
Un programa COM es prácticamente una imagen en memoria del archivo en disco, menos por el PSP que es creado durante el proceso de inicialización, y es por esta razón que el programa se inicia a partir del offset 0x100 (en assembler se utiliza el operador ORG). En cambio el formato EXE reorganiza sus segmentos en la memoria dando un tamaño adecuado (que es posible y necesario que el programador lo determine, dependiendo del lenguaje en el cual fue escrito), es por esta razón que dentro de la cabecera de un archivo EXE hay cierto código que realiza esta tarea.
El utilitario EXE2COM cambiaba de un formato a otro.
Las razones por la cual se utiliza un programa de emulación para correr una aplicación con formato EXE es variada, dependiendo en mayor medida desde que plataforma se intenta emular.
Desde el surgimiento, en el mercado de usuarios domésticos, de Windows XP fue común el uso de emuladores para DOS en el ámbito de los juegos de vídeo, debido a que Windows XP no utilizaba MS-DOS (como los sistemas basados en Windows NT) lo que trajo problemas de compatibilidad de los viejos juegos con el nuevo sistema. Otra de las causas para el uso de esto es que algunos juegos antiguos usaban temporizadores haciendo cierta cantidad de ciclos de operaciones NOP y con la aparición de procesadores más rápidos esto se hizo inútil ya que la velocidad en que terminaba el ciclo era mucho más rápido de lo que se tenía planeado. Uno de los emuladores para Windows de DOS más importante es DOSBox.
El Service Pack 2 de Windows XP incluyó un emulador para aplicación antiguas, pero este no funciona del todo bien. [cita requerida]
En Windows 7 se incluye un modo de compatibilidad para versiones anteriores del sistema que usaban NT o DOS.
La emulación de un ejecutable EXE en Mac OS puede requerir la emulación de la arquitectura de PC debido a que las antiguas computadoras Macintosh usaban procesadores RISC de Motorola, Inc. y PowerPC de IBM, Motorola, Inc. y Apple con un conjunto de instrucciones distinto. Uno de los emuladores más importantes en este campo es el QEMU, un software gratuito, de código abierto y multiplataforma.
Además de tener un emulador de PC es necesario que alguna aplicación pueda interpretar, cargar en memoria y ejecutar el programa EXE que se desea correr; en la mayoría de los casos el programa EXE realizará alguna llamada al sistema durante su ejecución. Todas estas tareas pueden realizarse de dos formas: teniendo una partición virtual con algún sistema Windows e iniciarlo desde Mac OS usando algún software como el QEMU o el Virtual PC for Mac; la segunda forma es usando el software llamado Darwine (compatible con los Macintosh con procesadores Motorola y los Intel) que permite realizar todas estas tareas sin necesidad de tener algún sistema Windows.
Linux no soporta el formato EXE, por lo que se necesita alguna aplicación en espacio de usuario para poder correr un programa de este tipo. Uno de los más populares es WINE, un software que permite correr un ejecutable EXE Win32 sin necesidad de virtualizar. También es posible usar emulador de DOS como DOSBox o DOSEMU.