2009-09-30 18 views
32

Entonces un archivo .exe es un archivo que puede ser ejecutado por Windows, pero ¿qué contiene exactamente? Lenguaje ensamblador que es específico del procesador? ¿O algún tipo de declaración intermedia reconocida por Windows que la convierte en ensamblado para un procesador específico? ¿Qué hace Windows exactamente con el archivo cuando lo "ejecuta"?¿Qué hay en un archivo .exe?

Respuesta

39

MSDN tiene un artículo "An In-Depth Look into the Win32 Portable Executable File Format" que describe la estructura de un archivo ejecutable.

Básicamente, un .exe contiene varios blobs de datos e instrucciones sobre cómo deben cargarse en la memoria. Algunas de estas secciones contienen código de máquina que se puede ejecutar (otras secciones contienen datos del programa, recursos, información de reubicación, información de importación, etc.)

Le sugiero que obtenga una copia de Windows Internals para obtener una descripción completa de lo que sucede cuando ejecutas un exe

Para un archivo ejecutable nativo, el código de máquina es específico de la plataforma. El encabezado .exe indica para qué plataforma es el .exe.

Cuando se ejecuta un nativo .exe ocurre lo siguiente (groseramente simplificada):

  • Un objeto de proceso se crea.
  • El archivo exe se lee en la memoria de ese proceso. Las diferentes secciones del .exe (código, datos, etc.) se asignan por separado y se les otorgan permisos diferentes (el código se ejecuta, los datos son de lectura/escritura, las constantes son de solo lectura).
  • Las reubicaciones ocurren en el .exe (las direcciones se parchan si el .exe no se cargó en su dirección preferida).
  • Se carga la tabla de importación y se cargan las DLL dependientes.
  • Las DLL se asignan en un método similar al de .exe, con las reubicaciones ocurriendo y sus DLL dependientes siendo cargadas. Se resuelven las funciones importadas de las DLL.
  • El proceso inicia la ejecución en un stub inicial en NTDLL.
  • El apéndice del cargador inicial ejecuta los puntos de entrada para cada DLL, y luego salta al punto de entrada del archivo .exe.

Los archivos ejecutables administrados contienen MSIL (Microsoft Intermediate Language) y se pueden compilar para que puedan apuntar a cualquier CPU compatible con CLR. No estoy tan familiarizado con el funcionamiento interno del cargador CLR (qué código nativo se ejecuta inicialmente para arrancar el CLR y comenzar a interpretar el MSIL); quizás alguien más pueda dar más detalles al respecto.

+0

¡Maldita sea, pásame! :) –

9

1's y 0's!

This wikipedia link le dará toda la información que necesita en el formato ejecutable portátil utilizado para las aplicaciones de Windows.

+0

Estaba a punto de rechazarte por una respuesta fatua hasta que vi que "Esto" era en realidad un enlace, no una referencia a "1 y 0". Espero que no te importe si lo edito para hacerlo un poco más claro – paxdiablo

+5

En mi día no teníamos 1s que teníamos que conformar con 0s –

12

Puedo decirle lo que contienen los primeros dos bytes en archivos .exe - 'MZ'. me refiero a los personajes 'MZ'.

En realidad representa: Mark Zbikowski. El tipo que diseñó el formato de archivo exe.

http://en.wikipedia.org/wiki/Mark_Zbikowski

+4

Lindo e intrigante (Definitivamente seguiré ese enlace), pero no terriblemente relevante para la pregunta que nos ocupa. – Twisol

+0

Sí, aunque es un fragmento interesante, solo explica los primeros dos bytes de un archivo PE. Eso no es mucho, en porcentaje. – paxdiablo

+0

Solo por curiosidad: ¿lo diseñó para Microsoft? – MasterMastic

1

archivo de un archivo EXE es realmente un tipo de archivo conocido como Ejecutable portátil. Contiene datos binarios, que el procesador puede leer y ejecutar (básicamente instrucciones x86.) También hay un lote de datos de encabezado y otro contenido misceláneo. El código ejecutable real se encuentra en una sección llamada .text, y se almacena como instrucciones de la máquina (específica del procesador). Este código (así como otras partes del .EXE) se almacenan en la memoria y se envía a la CPU, donde comienza a ejecutarse. (Tenga en cuenta que en realidad hay muchas más interfaces, esta es una explicación simplificada).

Cuestiones relacionadas