Question

Je l'ai vu une valeur étrange placé en tête 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 <-

Je ne sais pas ce qui est A8 faire là-bas, mais si je le remplace par des zéros mon programme n'exécute pas.

En un mot: ce qui est que

En outre, pourriez-vous me donner également un lien vers l'en-tête complet MS DOS?

Était-ce utile?

La solution

DWORD à 0x3c offset est le décalage du nouvel en-tête EXE, alias IMAGE_NT_HEADERS. Donc, si vous modifiez la valeur là-bas, le chargeur PE ne peut pas trouver le nouvel en-tête EXE.

Autres conseils

La première partie d'un PE est la souche MSDOS; à 0x3C (où votre « A8 » est) il y a le décalage à la signature du fichier PE. Si vous indiquent zéro, le chargeur ne sera pas en mesure de trouver la signature PE, et refusera de le charger (ou le charger comme un simple exécutable MS-DOS, je ne l'ai pas essayé). Pour plus d'informations, consultez le spécifications du format PE .

Je pense que cela est le décalage de la nouvelle en-tête de PE, les 30 premiers octets impairs sont l'en-tête MS-DOS, ce décalage dans le fichier où réside « A8 » In correspond au champ de la structure _IMAGE_DOS_HEADER appelé LONG e_lfanew; // File address of new exe header; Il est que la valeur « A8 » ferait partie du nouveau IMAGE_NT_HEADER qui contient ces informations

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

Les deux premiers octets sont l'en-tête d'origine MS-DOS dans le fichier exécutable comme indiqué par cette constante: WORD IMAGE_DOS_SIGNATURE = 0x5A4D; // MZ; Le IMAGE_NT_HEADER a cette signature pour identifier qu'il est un exécutable pour les plates-formes NT DWORD IMAGE_NT_SIGNATURE = 0x00004550; // PE00;

Vous trouverez toutes ces informations dans un fichier d'en-tête appelé pe.h.

Ce qui est arrivé, il est vous effacé la valeur « A8 », le chargeur n'a pas pu trouver le IMAGE_NT_HEADER et donc échoué.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top