PDF de programación - Formato de ficheros ejecutables - Formato PE

Imágen de pdf Formato de ficheros ejecutables - Formato PE

Formato de ficheros ejecutables - Formato PEgráfica de visualizaciones

Publicado el 6 de Abril del 2017
2.298 visualizaciones desde el 6 de Abril del 2017
2,5 MB
45 paginas
Creado hace 12a (30/06/2011)
ap



CONTENIDO

ESTRUCTURA DE UN FICHERO EJECUTABLE

DIRECCIONES FÍSICAS, VIRTUALES RELATIVAS Y VIRTUALES

IMAGE FILE HADER

IMAGE OPTIONAL HEADER

IMAGE DATA DIRECTORY

IMAGE SECTION HEADER

EXPORT DIRECTORY

IMPORT DIRECTORY

RESOURCE DIRECTORY

RELOCATION DIRECTORY

DEBUG DIRECTORY

TLS DIRECTORY (THREAD LOCAL STORAGE)

DIRECTORIO LOAD CONFIG

DELAY IMPORT DIRECTORY

BOUND IMPORT DIRECTORY

REFERENCIAS

DESPEDIDA

P á g i n a | 2

3

5

6

8

14

16

19

24

27

31

34

36

38

40

42

44

45



Formato Portable Executable bajo Windows – The Swash Julio de 2011



ESTRUCTURA DE UN FICHERO EJECUTABLE

P á g i n a | 3

ELEMENTO
DOS HEADER
DOS STUB
NT HEADER

 PE Signatura

FILE HEADER
OPTIONAL HEADER
DATA DIRECTORY
SECTION HEADER
CUERPO DEL ARCHIVO
END OF FILE



DESCRIPCIÓN
Cabecera de archivos DOS.
Mensaje en sistemas DOS.
Inicio del archivo ejecutable.
Signatura PE\x0\x0
Información base del archivo.
Información adicional (Necesaria en ejecutables).
IMAGE DATA DIRECTORY
Información de las secciones del ejecutable
Contenido de cada sección.
Final del archivo


Los archivos ejecutables originalmente nombrados Portable Executable (A par-
tir de ahora llamados con la abreviatura PE) son los denominados programas
en Windows. La idea base de estos archivos fue formarlos de manera estructu-
rada para mayor flexibilidad. El archivo se divide en cabeceras y cuerpo. Las
cabeceras proveen información al loader de Windows para poder ejecutarlos.
Posterior a estas cabeceras se encuentra el cuerpo del archivo la cual tendrá
el contenido de cada una de las secciones.



DOS HEADER:
Cabecera obsoleta incluida en los archivos tanto DOS como PE, en los PE tiene
solo 2 campos útiles:

- e_magic: Este campo contiene las siglas ‘MZ’ que todo archivo ejecu-
table debe tener, estás siglas son en honor a Mark Zbikowsky uno de los
principales diseñadores de MS-DOS. Si un archivo ejecutable no tiene es-
tas siglas no será ejecutado, podemos decir que actúa como una firma
de validación.



Formato Portable Executable bajo Windows – The Swash Julio de 2011

P á g i n a | 4



-

l_fanew: Dirección física o puntero hacia el NT HEADER el cual inicia por
la firma PE\x0\x0. El valor de este campo suele encontrarse en el des-
plazamiento 0x3C.


DOS STUB:
El DOS STUB es una aplicación válida para MS-DOS la cual imprimirá en panta-
lla el mensaje “This program cannot be run in DOS mode”.



NT HEADER:
La cabecera NT inicia en el valor apuntado por el campo l_fanew, justo en el
inicio nos encontramos con una firma que nos ubica y es la cadena formada
por los caracteres PE\x0\x0 y posterior a este ya podemos encontrar la estruc-
tura del IMAGE_FILE_HEADER.
El NT HEADER está presente tanto en archivos ejecutables como librerías de
enlace dinámico. En caso de no encontrar la firma PE\x0\x0 el archivo no abr-
ía de ejecutarse y lo mismo pasa con la firma MZ.



Formato Portable Executable bajo Windows – The Swash Julio de 2011



DIRECCIONES FÍSICAS, VIRTUALES RELATIVAS

Y VIRTUALES

P á g i n a | 5


Es muy importante relacionarnos con estos 3 conceptos los cuales son necesa-
rios para entender muchos campos de la estructura de un archivo ejecutable.

DIRECCIÓN FÍSICA O DESPLAZAMIENTO (OFFSET):
Corresponde a un valor que se encuentra en el rango del tamaño físico del
archivo, no podrá haber desplazamiento menor a 0 o mayor al tamaño del
archivo.

DIRECCIÓN VIRTUAL RELATIVA:
Como un archivo en memoria es distinto a un archivo en disco las direcciones
se manejan de manera distinta, cada sección establece una Dirección virtual
y desde ahí se copiará el contenido de cada sección. Para obtener una di-
reccion Virtual relativa o abreviadamente RVA de un Offset debemos recurrir
al siguiente proceso:

=(−)+
=(−)+

Para hacer lo contrario, es decir obtener un Offset a partir de un RVA:

Hay que tener en cuenta que los valores:

- VirtualAddress
- PointerToRawData

Son valores pertenecientes a la sección en la cual se encuentre dicho valor,
pero como sabemos ¿a qué sección pertenece?
Sencillamente buscaremos en el rango de las secciones, si buscamos un RVA
deberemos buscar en los rangos VirtualAddress – VirtualSize y si buscamos un
Offset buscamos en los rangos PointerToRawData – SizeOfRawData.

DIRECCIONES VIRTUALES:
Las direcciones virtuales son aquellas direcciones que hacen referencia directa
a la posición del archivo cargado en memoria, en el caso vendrían siendo la
base donde se ha cargado en memoria que puede ser el valor proporcionado
por el campo ImageBase (IMAGE OPTIONAL HEADER) o que puede variar ya
que el loader de Windows en caso de que esta dirección esté ocupada re-
asignará otra y reconstruirá el modulo del ejecutable ahí con información del
reloc directory.
Entonces con esto entendemos que una dirección virtual se diferenciará o no
por la presencia del ImageBase, si lo quitamos pasa a ser un RVA y si queremos
convertir un Offset a dirección virtual deberemos pasarlo a RVA y sumar el
ImageBase.



Formato Portable Executable bajo Windows – The Swash Julio de 2011



IMAGE FILE HADER



P á g i n a | 6

Esta cabecera contiene información general acerca del archivo entre sus
campos tenemos:

TAMAÑO
CAMPO
Machine
WORD
NumberOfSections
WORD
TimeDateStamp
DWORD
PointerToSymbolTable DWORD
NumberOfSymbols
DWORD
SizeOfOptionalHeader DWORD
Characteristics
DWORD



Machine: Este campo define el tipo de arquitectura del computador u emula-
dor en el cual se podrá ejecutar el programa. Este puede ser:


CONSTANTE
IMAGE_FILE_MACHINE_I386
IMAGE_FILE_MACHINE_IA63
IMAGE_FILE_MACHINE_AMD64 0x8664 X64

VALOR EQUIVALENCIA
0x014C X86
0x0200

Intel Itanium


NumberOfSections: Este campo tiene un tamaño de 2 bytes y contiene el
número de secciones que tienen el ejecutable sin exceptuar ninguna teniendo
en cuenta que el límite que impone el loader es de 96 secciones o por lo me-
nos solo esa cantidad como máximo cargará.



TimeDateStamp: Este campo tiene un tamaño de 4 bytes e indica el número
de segundos a partir de 1 de Enero de 1970. Estos segundos nos indicarán la
fecha de creación del archivo.

PointerToSymbolTable & NumberOfSymbols: Estos campos son empleados por
los archivos .obj o COFF FILES, en los archivos ejecutables predeterminadamen-
te estarán en valor 0.

SizeOfOptionalHeader: Este campo tiene un tamaño de 2 bytes y contendrá el
valor del tamaño del IMAGE OPTIONAL HEADER.

Characteristics: Este campo indica los distintos atributos del archivo mediante
distintos valores. Cuando el archivo presenta varias características el valor final
se obtiene mediante la suma de cada característica:



Formato Portable Executable bajo Windows – The Swash Julio de 2011



P á g i n a | 7



Valores de las características:
VALOR
CONSTANTE
IMAGE_FILE_RELOCS_STRIPPED
0x0001
IMAGE_FILE_EXECUTABLE_IMAGE
0x0002
IMAGE_FILE_LINE_NUMS_STRIPPED
0x0004
IMAGE_FILE_LOCAL_SYMS_STRIPPED
0x0008
IMAGE_FILE_AGGRESSIVE_WS_TRIM
0x0010
IMAGE_FILE_LARGE_ADDRESS_AWARE
0x0020
Unknown
0x0040
IMAGE_FILE_BYTES_REVERSED_LO
0x0080
IMAGE_FILE_32BIT_MACHINE
0x0100
IMAGE_FILE_DEBUG_STRIPPED
0x0200
IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP 0x040
IMAGE_FILE_NET_RUN_FROM_SWAP
0x080
IMAGE_FILE_SYSTEM
0x100
IMAGE_FILE_DLL
0x200

Con esto terminamos la parte del IMAGE FILE HEADER y continuaremos con el
IMAGE OPTIONAL HEADER.



Formato Portable Executable bajo Windows – The Swash Julio de 2011





IMAGE OPTIONAL HEADER

P á g i n a | 8

CAMPO
Magic
MajorLinkerVersion
MinorLinkerVersion
SizeOfCode
SizeOfInitializedData
SizeOfUninitializedData
AddressOfEntryPoint
BaseOfCode
BaseOfData
ImageBase
SectionAlignment
FileAlignment
MajorOperatingSystemVersion
MinorOperatingSystemVersion
MajorImageVersion
MinorImageVersion
MajorSubsystemVersion
MinorSubsystemVersion
Win32VersionValue
SizeOfImage
SizeOfHeaders
CheckSum
Subsystem
DllCharacteristics
SizeOfStackReserve
SizeOfStackCommit
SizeOfHeapReserve
SizeOfHeapCommit
LoaderFlags
NumberOfRvaAndSizes



TAMAÑO
WORD
BYTE
BYTE
DWORD
DWORD
DWORD
DWORD
DWORD
DWORD
DWORD
DWORD
DWORD
WORD
WORD
WORD
WORD
WORD
WORD
DWORD
DWORD
DWORD
DWORD
WORD
WORD
DWORD
DWORD
DWORD
DWORD
DWORD
DWORD

El IMAGE OPTIONAL HEADER proporciona información adicional al loader para
que cargue correctamente el ejecutable. Esta información en los archivos
COFF es opcional pero en los archivos ejecutables es obligatoria. El tamaño de
esta estructura no es fijo, lo define el campo SizeOfOptionalHeader (IMAGE FILE
HEADER).
Miremos cada uno de los campos de esta estructura:

Magic: (No confundir con e_magic).
Este campo tiene un tamaño de 2 bytes y determina si el ejecutable es para
si
  • Links de descarga
http://lwp-l.com/pdf2684

Comentarios de: Formato de ficheros ejecutables - Formato PE (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad