Странное значение в заголовке EXE - PullRequest
3 голосов
/ 02 февраля 2010

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

Одним словом: что это?

Кроме того, не могли бы вы дать мне ссылку на полный заголовок MS DOS?

Ответы [ 3 ]

4 голосов
/ 02 февраля 2010

Первая часть PE - это заглушка MSDOS; в 0x3C (где ваш "A8") есть смещение к подписи файла PE. Если вы обнуляете его, загрузчик не сможет найти сигнатуру PE и откажется загружать ее (или загрузить как просто исполняемый файл MS-DOS, я не пробовал). Для получения дополнительной информации см. Спецификации формата PE .

3 голосов
/ 02 февраля 2010

Я подозреваю, что это смещение к новому 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 OptionalHeader;

Первые два байта являются исходным заголовком MS-DOS в исполняемом файле, как показано этой константой: WORD IMAGE_DOS_SIGNATURE = 0x5A4D; // MZ; IMAGE_NT_HEADER имеет эту подпись, чтобы определить, что это исполняемый файл для платформ NT DWORD IMAGE_NT_SIGNATURE = 0x00004550; // PE00;

Вы найдете всю эту информацию в заголовочном файле с именем pe.h.

То, что произошло, вы уничтожили значение 'A8', загрузчик не смог найти IMAGE_NT_HEADER и, следовательно, не смог.

3 голосов
/ 02 февраля 2010

DWORD со смещением 0x3c - это смещение нового заголовка EXE, также известного как IMAGE_NT_HEADERS. Поэтому, если вы измените значение там, загрузчик PE не сможет найти новый заголовок EXE.

...