Pregunta

He visto un valor extraño colocado en la cabecera EXE

00000000 :4D 5A 90 00 03 00 00 00 - 04 00 00 00 FF FF 00 00
00000010 :B8 00 00 00 00 00 00 00 - 40 00 00 00 00 00 00 00
00000020 :00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00
00000030 :00 00 00 00 00 00 00 00 - 00 00 00 00 A8 00 00 00
00000030 :00 00 00 00 00 00 00 00 - 00 00 00 00 A8 00 00 00 <-

No sé lo que es A8 haciendo allí, pero si puedo reemplazar con ceros mi programa no se ejecuta.

En una palabra: lo que es

?

Además, podría darme también un enlace a la cabecera completa de MS-DOS?

¿Fue útil?

Solución

DWORD en 0x3C desplazamiento es el desplazamiento de la nueva cabecera EXE, también conocido como IMAGE_NT_HEADERS. Así que si cambia el valor de ahí, el cargador PE no puede encontrar la nueva cabecera EXE.

Otros consejos

La primera parte de un PE es el stub MSDOS; en 0x3C (donde su "A8" es) está la desviación a la firma del archivo PE. Si se pone a cero, el cargador no será capaz de encontrar la firma PE, y se negará a cargarlo (o simplemente cargarlo como un ejecutable de MS-DOS, no lo probé). Para obtener más información, consulte la PE formato especificaciones .

Sospecho que es el desplazamiento a la nueva cabecera PE, los primeros 30 bytes impares son el encabezado MS-DOS, que compensa en el archivo donde reside el 'A8' en Corresponde al campo en el _IMAGE_DOS_HEADER estructura llamada LONG e_lfanew; // File address of new exe header; Es ese valor 'A8' sería parte de la nueva IMAGE_NT_HEADER que contiene esta información

  • DWORD Signature;
  • _IMAGE_FILE_HEADER FileHeader;
  • _IMAGE_OPTIONAL_HEADER OptionalHeader;

Los primeros dos bytes son los MS-DOS originales cabecera en el ejecutable como se muestra por esta constante: WORD IMAGE_DOS_SIGNATURE = 0x5A4D; // MZ; El IMAGE_NT_HEADER tiene esta firma para identificar que se trata de un ejecutable para plataformas DWORD IMAGE_NT_SIGNATURE = 0x00004550; // PE00 NT;

A continuación encontrará toda esta información en un archivo de cabecera llamada pe.h.

Lo que ocurrió allí es que acabó con el valor 'A8', el cargador no pudo encontrar el IMAGE_NT_HEADER y por lo tanto fracasado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top