Вопрос

Я видел странное значение, помещенное в заголовке 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 И, следовательно, не удалось.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top