Странное значение в заголовке EXE
-
24-09-2019 - |
Вопрос
Я видел странное значение, помещенное в заголовке 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 <-
Я не знаю, что такое A8
Делать там, но если я заменил его zeros, моя программа не выполняется.
Одно слово: что это?
Также, не могли бы вы дать мне также ссылку на полный заголовк MS DOS?
Решение
DWORD на смещении 0x3c - это смещение нового заголовка EXE, AKA Image_nt_Headers. Поэтому, если вы измените там значение, PE погрузчик не может найти новый заголовок EXE.
Другие советы
Первая часть PE - это заглушка MSDOS; При 0x3c (где ваш «A8» есть) есть смещение для подписи файла PE. Если вы нулете это, загрузчик не сможет найти подпись PE и откажется от его загрузки (или загружать ее как только исполняемый файл MS-DOS, я не пытался). Для получения дополнительной информации см. Спецификации формата PE.
Я подозреваю, что это смещение для нового заголовка PE, первые 30 нечетных байтов - заголовок MS-DOS, который смещен в файл, где находится «A8», соответствует полю в структуре. _IMAGE_DOS_HEADER
называется LONG e_lfanew; // File address of new exe header
; Это то значение «A8» будет частью нового IMAGE_NT_HEADER
который содержит эту информацию
- Dword подпись;
- _Image_file_header fileheader;
- _Image_optional_header дополнительное устройство;
Самые первые два байта являются оригинальными заголовками MS-DOS в исполняемый файл, как показано на рисунке этой константы: WORD IMAGE_DOS_SIGNATURE = 0x5A4D; // MZ
; Image_NT_HEADER имеет эту подпись для идентификации того, что это исполняемый файл для платформ NT DWORD IMAGE_NT_SIGNATURE = 0x00004550; // PE00
;
Вы найдете всю эту информацию в заголовом файле под названием pe.h
.
Что случилось, вы вытер ценность «A8», погрузчик не смог найти IMAGE_NT_HEADER
И, следовательно, не удалось.