Valeur étrange en-tête EXE
-
24-09-2019 - |
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?
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é.