2012-09-01 23 views
5

He leído que un ejecutable almacena el código en diferentes secciones. Por ejemplo, una sección separada para datos, etc. ¿Es esto genérico en diferentes plataformas como Win o MacOs o Linux?¿Cómo se almacena el código en un ejecutable?

Algunas ideas al respecto serían realmente útiles.

Respuesta

2

Windows usa el formato Portable Executable.

* nix generalmente utiliza el formato ejecutable y vinculable. Anteriormente algunos usaban SOM, a.out, ECOFF, XCOFF, COFF y algunos otros.

OS X e iOS (y NeXT, ventiladores de historia) usan Mach-O.

Los sistemas PowerPC aún son compatibles con el formato ejecutable preferido que se utilizó con los sistemas operativos Mac anteriores y algunas formas de BeOS.

Tal vez comenzar con http://en.wikipedia.org/wiki/Comparison_of_executable_file_formats

4

Tiene usted razón en que un ejecutable tiene varias secciones o segmentos: No todos ellos, sin embargo, son de código.

Por lo general, hay un segmento para el código - en ELF y PE, esto generalmente se llama .text. Existen otras adicionales para almacenar los datos de vinculación dinámica, cadenas codificadas duro, leer sólo los datos, variables globales, etc.

Para ver estos por sí mismo, en lugar de Wiki y Google, tratar las manos en:

En Windows: tener una herramienta llamada DUMPBIN.EXE, parte de Visual Studio. Si no puede tener eso en sus manos, use Dependency Walker (que se puede descargar libremente). Esto analizará archivos PE y PE32 + (es decir, de 64 bits)

En Linux: utilice objdump -x, o readelf (ambos son prácticamente lo mismo, aunque con opciones ligeramente diferentes) para archivos ELF.

En Mac: Use otool -l para ver los comandos de carga (que le muestran las secciones y los segmentos) en archivos Mach-O.

El uso de cualquiera o todas las herramientas con suerte le dará una mejor idea de cómo funcionan las cosas.

Espero que esto ayude,

TG

Cuestiones relacionadas