Как бы я изменил заголовок, в то же время позволяя файлу работать как обычно?
Вы не можете!
Есть причина, по которой строка MZ
(16 битов, представляющих 0x5A4D
) называется "магическим" числом и действительно требуется согласно спецификации EXE/PE (с корнями вплоть до исполняемых файлов формата DOS). Компоновка всех современных переносимых исполняемых файлов выглядит следующим образом (ссылка):
В этой статье MSDN, касающейся формата Portable Executable, заголовок MS-DOS подробно описан:
Заголовок MS-DOS
Каждый PE-файл начинается с небольшого исполняемого файла MS-DOS®. Потребность в этом исполняемом заглушке возникла в первые дни Windows, еще до того, как ее запустило значительное количество потребителей.
При выполнении на компьютере без Windows программа могла бы по крайней мере распечатать сообщение о том, что Windows требуется для запуска исполняемого файла.
Первые байты PE-файла начинаются с традиционного заголовка MS-DOS, который называется IMAGE_DOS_HEADER
. Единственными двумя значениями любой важности являются e_magic
и e_lfanew
. Поле e_lfanew
содержит смещение файла заголовка PE.
Поле e_magic
(WORD [NB: 16 бит]) должно быть установлено значение 0x5A4D
. Для этого значения есть #define
именем IMAGE_DOS_SIGNATURE
. В представлении ASCII 0x5A4D
- это MZ
, инициалы Марка Збиковского, одного из первоначальных архитекторов MS-DOS.
Для получения дополнительной информации о Windows PE/.Формат EXE, я настоятельно рекомендую взглянуть на раздел « Исполняемые файлы Windows» в x86 Disikimbly Wikibook. Он содержит обширный массив низкоуровневой информации о формате.