How would I change the header whilst still allowing the file to work as normal?
Você não pode!
Existe uma razão pela qual a cadeia MZ
(16-bits representando 0x5A4D
) é referida como um número "mágico" e, de facto, é requerida de acordo com a especificação EXE / PE (com raízes desde Executáveis no formato DOS). O layout de todos os executáveis portáteis modernos é exibido da seguinte forma ( ref ):
Em
The MS-DOS Header
Every PE file begins with a small MS-DOS® executable. The need for this stub executable arose in the early days of Windows, before a significant number of consumers were running it. When executed on a machine without Windows, the program could at least print out a message saying that Windows was required to run the executable.
The first bytes of a PE file begin with the traditional MS-DOS header, called an
IMAGE_DOS_HEADER
. The only two values of any importance aree_magic
ande_lfanew
. Thee_lfanew
field contains the file offset of the PE header.The
e_magic
field (a WORD [NB: 16-bits]) needs to be set to the value0x5A4D
. There's a#define
for this value, namedIMAGE_DOS_SIGNATURE
. In ASCII representation,0x5A4D
isMZ
, the initials of Mark Zbikowski, one of the original architects of MS-DOS.
Para mais informações sobre o formato Windows PE / EXE, eu recomendo dar uma olhada na seção Arquivos executáveis do Windows da desmontagem do Wikilivros x86 . Ele contém uma ampla variedade de informações de baixo nível sobre o formato.