Diferencia entre revisiones de «EXE (informática)»

Contenido eliminado Contenido añadido
m Revertidos los cambios de 181.135.7.162 (disc.) a la última edición de 2001:1388:1B8B:1144:F12C:F66D:CF9B:E10E
Línea 13:
* '''[[Portable Executable|Ejecutable portable de 64 bits]]:''' Fue introducido en las versiones de [[64 Bits]] de Windows, estos son archivos de tipo ''PE'' pero para una CPU de 64 Bits con un set de instrucciones [[x86-64]] o [[IA-64]]. Puede ser usado únicamente en las ediciones de 64 Bits de Windows, como Windows XP 64 Bit Edition, Windows Server 2003 64 Bit Edition, Windows Vista x64, Windows Server 2008 x64, Windows Server 2008 R2 y Windows 7 x64, corriendo en máquinas propicias para esta clase de ejecutables.
 
== holaFormato ==
==
<!--
http://www.delorie.com/djgpp/doc/exe/
Línea 23 ⟶ 22:
y el texto exefmt.txt de la web de microsoft
hablar sobre la solución que se dio para las aplicaciones Win32 para que DOS diga q no puede ejecutarla, usando siempre un pequeño programa MZ al principio de los programas... (tal vez tendría q estar en la seccion anterior)
-->
--hola amigosss mioss 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:
 
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:
* Posición 0 (2 bytes): caracteres “MZ” o “ZM” identificativos del formato EXE.
* Posición 2 (2 palabras): tamaño del fichero. La primera palabra es el número de bytes del último sector. La segunda palabra es el número de sectores que ocupa el fichero (cada sector ocupa 512 bytes). De esta forma, el tamaño del fichero en bytes se calcula como (nsectores-1)*512+nbytes.
Línea 39 ⟶ 40:
Ejecutable portable de 69 bits
 
== Programación ==
== hola
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]].
http://www.delorie.com/djgpp/doc/exe/
http://mediasrv.ns.ac.yu/extra/fileformat/binary/exe/mzexe.txt
http://www.bsdg.org/SWAG/EXEC/0032.PAS.html
http://mediasrv.ns.ac.yu/extra/fileformat/binary/exe/exe-win.txt
http://vx.netlux.org/lib/static/vdat/tumisc58.htm
y el texto exefmt.txt de la web de microsoft
hablar sobre la solución que se dio para las aplicaciones Win32 para que DOS diga q no puede ejecutarla, usando siempre un pequeño programa MZ al principio de los programas... (tal vez tendría q estar en la seccion anterior)
-->
hola amigos mios 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:
* Posición 0 (2 bytes): caracteres “MZ” o “ZM” identificativos del formato EXE.
* Posición 2 (2 palabras): tamaño del fichero. La primera palabra es el número de bytes del último sector. La segunda palabra es el número de sectores que ocupa el fichero (cada sector ocupa 512 bytes). De esta forma, el tamaño del fichero en bytes se calcula como (nsectores-1)*512+nbytes.
* Posición 6 (1 palabra): número de reubicaciones a realizar. Esto es, número de referencias a segmentos reales que hay que modificar cuando el programa se cargue en memoria. Éste es el caso del segundo operando de la instrucción MOV AX, DATOS. Las direcciones de dichas referencias se encuentran disponibles en la denominada tabla de reubicaciones, incluida en la cabecera de un fichero EXE.
* Posición 8 (1 palabra): tamaño de la cabecera en párrafos (1 párrafo = 16 bytes).
* Posición 10 (1 palabra): mínima cantidad de memoria en párrafos requerida por el programa en adición a lo que ocupa en disco.
* Posición 12 (1 palabra): máxima cantidad de memoria requerida en párrafos.
* Posición 14 (2 palabras): valores iniciales de SS (primera palabra) y SP (segunda palabra).
* Posición 18 (1 palabra): palabra de comprobación. El DOS no suele utilizarla, de hecho la herramienta TLINK no la genera.
* Posición 20 (2 palabras): valores iniciales de CS (segunda palabra) e IP (primera palabra).
* Posición 24 (1 palabra): posición donde comienza la tabla de reubicación. Cada entrada de la tabla ocupa 4 bytes (desplazamiento y segmento) y contiene la dirección de las palabras a reubicar (a cada una hay que sumarle el valor de segmento en el que se cargue el programa).
* Posición 26 (1 palabra): número de overlay. Es 0 cuando se trata de un programa principal.
* Posición 28-61: valores desconocidos (dependientes del compilador).
 
Para revisar el funcionamiento de un programa se realiza la tarea llamada [[depuración de errores|depuración]] (en inglés: ''debugging'').
Ejecutable portable de 69 bits
 
A continuación se detallan la realización estas tareas para programas de tipo EXE.
 
=== Compilado, Ensamblado y enlazado ===
[[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 C|Lenguaje de programación C]] usando el compilador [[GCC]] del proyecto [[MinGW]] desde la línea de comandos:
 
{| align="center"
|-
! Archivo: ''ejemplo.c'' !! En la línea de comandos
|-
| valign="top" |
<source lang=C>
#include <stdio.h>
 
int main(void){
printf("¡Hola, mundo!\n");
return 0;
}
</source>
| valign="top" |
<source lang=dos>
C:\>gcc ejemplo.c -o ejemplo.exe
 
C:\>ejemplo.exe
¡Hola, mundo!
C:\>
</source>
|}
 
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).
 
El 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 [[Turbo Assembler|TASM]] y enlazador [[Turbo Linker|TLINK]] desde la línea de comandos:
 
{| align="center"
! Archivo: ''ejemplo.asm'' !! En la línea de comandos
|-
| valign="top" |
<source lang=asm>
.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
 
</source>
| valign="top" |
<source lang=dos>
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:\>
</source>
|}
 
=== Depuración ===
<!-- (hablar sobre referemcias cruzadas, debug, editores hex, desensambladores) -->
 
== Diferencias entre .COM y .EXE ==