Curso de Asembler - Estructura EXE
Curso gratis creado por Pablo Barrón Ballesteros ( Wintermute ). Extraido de:
04 de Noviembre de 2005
Ensamblador
12 - Estructura EXE
Los ficheros EXE tienen una estructura diferente a los Com. Aparte de
tener una cabecera especial, pueden ocupar m s de un segmento, diferenci n-
dose segmentos de datos, código y pila.
La cabecera EXE va como sigue ( no es necesario para hacer uno, pero
tampoco se le tienen que hacer ascos a la información ;D )
Offset Descripción
00 Marca de EXE (MZ = 4D5A). Es obligatorio que ‚stos dos bytes sean
MZ o ZM, sino no funcionar
02 Número de bytes en la últma p gna del programa
Todas las p ginas son de 512 bytes, menos la última que ser menos.
04 Número total de paginas de 512 bytes
06 Número de elementos de la tabla de elementos reubicables.
08 Tama¤o de la cabecera en p rrafos de 16 bytes.
0A Mínimo de memoria requerido adem s de la necesaria para cargar
el programa.
0C M ximo de memoria requerido. Normalmente los linkadores ponen
FFFFh aquí para que el DOS de toda la memoria disponible al
programa.
0E SS inicial
10 SP inicial
12 Checksum: complemento a 1 de la suma de los valores de 16 bits del
programa, excluido este campo.
14 IP inicial
16 CS inicial
18 Offset de la Tabla de Reubicación
1A Número de Overlays generados. S es 0 es un único EXE.
Visto ‚sto, símplemente que os qued‚is con los offset 14 y 16, que son
CS:IP del EXE donde empieza la ejecución. Ahora pongo un listado de
típico EXE:
; LISTADO DE EJEMPLO DE EXE
PILA SEGMENT STACK 'STACK'
DW 150 DUP (?) ; Ponemos 150 palabras ( 300 bytes ) de
;pila
PILA ENDS ; Esto ha sido el segmento dedicado a
;la pila
DATOS SEGMENT 'DATA' ; Abre ahora el segmento de datos
Mensa DB 'Esto es un ejemplo EXE$' ; El $ al final, recordad !
DATOS ENDS
CODIGO SEGMENT 'CODE' ; Vamos con el de código
ASSUME CS:CODIGO,DS:DATOS,SS:PILA
Entrada PROC
mov ax,DATOS ; Valor del segmento DATOS
mov ds,ax ; Ahora queda en DS
lea dx,mensa ; Desplazamiento del mensaje
mov ah,9 ; Servicio 9 de la int 21h
int 21h ; Imprime el mensaje
mov ax,4C00h ; Servicio 4Ch, retorna al DOS
int 21h
Entrada ENDP ; Cierra el procedimiento Entrada
CODIGO ENDS
END Entrada ; Fin del programa
tener una cabecera especial, pueden ocupar m s de un segmento, diferenci n-
dose segmentos de datos, código y pila.
La cabecera EXE va como sigue ( no es necesario para hacer uno, pero
tampoco se le tienen que hacer ascos a la información ;D )
Offset Descripción
00 Marca de EXE (MZ = 4D5A). Es obligatorio que ‚stos dos bytes sean
MZ o ZM, sino no funcionar
02 Número de bytes en la últma p gna del programa
Todas las p ginas son de 512 bytes, menos la última que ser menos.
04 Número total de paginas de 512 bytes
06 Número de elementos de la tabla de elementos reubicables.
08 Tama¤o de la cabecera en p rrafos de 16 bytes.
0A Mínimo de memoria requerido adem s de la necesaria para cargar
el programa.
0C M ximo de memoria requerido. Normalmente los linkadores ponen
FFFFh aquí para que el DOS de toda la memoria disponible al
programa.
0E SS inicial
10 SP inicial
12 Checksum: complemento a 1 de la suma de los valores de 16 bits del
programa, excluido este campo.
14 IP inicial
16 CS inicial
18 Offset de la Tabla de Reubicación
1A Número de Overlays generados. S es 0 es un único EXE.
Visto ‚sto, símplemente que os qued‚is con los offset 14 y 16, que son
CS:IP del EXE donde empieza la ejecución. Ahora pongo un listado de
típico EXE:
; LISTADO DE EJEMPLO DE EXE
PILA SEGMENT STACK 'STACK'
DW 150 DUP (?) ; Ponemos 150 palabras ( 300 bytes ) de
;pila
PILA ENDS ; Esto ha sido el segmento dedicado a
;la pila
DATOS SEGMENT 'DATA' ; Abre ahora el segmento de datos
Mensa DB 'Esto es un ejemplo EXE$' ; El $ al final, recordad !
DATOS ENDS
CODIGO SEGMENT 'CODE' ; Vamos con el de código
ASSUME CS:CODIGO,DS:DATOS,SS:PILA
Entrada PROC
mov ax,DATOS ; Valor del segmento DATOS
mov ds,ax ; Ahora queda en DS
lea dx,mensa ; Desplazamiento del mensaje
mov ah,9 ; Servicio 9 de la int 21h
int 21h ; Imprime el mensaje
mov ax,4C00h ; Servicio 4Ch, retorna al DOS
int 21h
Entrada ENDP ; Cierra el procedimiento Entrada
CODIGO ENDS
END Entrada ; Fin del programa
Valora este capítulo:
Autor y licencia de 'Curso de Asembler - Estructura EXE'
|
Opiniona sobre 'Curso de Asembler - Estructura EXE' (7)
Tu nombre debe tener tres caracteres como mínimo.
Es necesario que te des de alta con una cuenta de correo válida.
Es necesario que te des de alta con una cuenta de correo válida.
El contenido del título de tu opinión debe tener tres caracteres como mínimo.
Es obligatorio que selecciones una valoración del recurso.
El contenido del comentario de tu opinión debe tener tres caracteres como mínimo.
Opina sobre este curso gratis |
Wikis relacionados con 'Curso de Asembler - Estructura EXE'
El objetivo de este curso es aprender a programar en el lenguaje Ada, desde sus...
Más »
Excelente curso de iniciación a la astronomía para aquellos que quieran aprender sobre esta apasionante...
Más »
Este es un curso tremendamente completo, guiado y con ejemplos y prácticas pensadas para convertirlo...
Más »
La idea de este curso surgió de varias conversaciones entre amig@s de la cuadrilla y...
Más »
Las manos y las palabras son, antes incluso que el arte, los órganos de comprensión...
Más »
