rpi resourcehacker resource net hacker from descargar ajohnson windows reverse-engineering portable-executable

windows - from - http rpi net au/~ ajohnson resourcehacker



¿Cuál es la diferencia entre los segmentos.rdata y.idata? (2)

Noté en IDA que el archivo PE que .rdata no solo tiene la sección .rdata sino también .idata . ¿Cual es la diferencia?


De hecho, los nombres de los segmentos son ignorados por Windows.

Hay enlazadores que usan diferentes nombres de segmentos e incluso es posible almacenar los Descriptores de Importación, Descriptores de Exportación, Recursos, etc. en el segmento ".text" en lugar de usar segmentos separados.

Sin embargo, parece ser más sencillo crear secciones separadas para dichos metadatos, por lo que la mayoría de los enlazadores usarán secciones separadas.

Esto significa: las secciones ".idata", ".rdata", ".rsrc", ... no contienen datos del programa (aunque su nombre termina con "datos") pero contienen información meta que utiliza el sistema operativo. La sección ".rsrc", por ejemplo, contiene información sobre el icono que se muestra cuando se mira el archivo ejecutable en el Explorador.

".idata" contiene información sobre todos los archivos DLL requeridos por el programa.


  • .rdata es para datos const. Es la versión de solo lectura del segmento .data.

  • .idata contiene el directorio de importación (.edata para exportaciones). Es utilizado por EXE y DLL para designar las funciones importadas y exportadas. Consulte la especificación de formato PE ( http://msdn.microsoft.com/library/windows/hardware/gg463125 ) para obtener más información.

Resumiendo nombres de segmentos típicos:

.text: Code .data: Initialized data .bss: Uninitialized data .rdata: Const/read-only (and initialized) data .edata: Export descriptors .idata: Import descriptors .reloc: Relocation table (for code instructions with absolute addressing when the module could not be loaded at its preferred base address) .rsrc: Resources (icon, bitmap, dialog, ...) .tls: __declspec(thread) data (Fails with dynamically loaded DLLs -> hard to find bugs)

Como menciona Martin Rosenau, los nombres de los segmentos son solo típicos. El tipo de segmento verdadero se especifica en el encabezado del segmento o se define por el uso de datos almacenados en el segmento.