Pergunta

Eu já vi um valor estranho colocado no cabeçalho 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 <-

Eu não sei o que é A8 Fazendo lá, mas se eu substituí -lo por zeros, meu programa não é executado.

Em uma palavra: o que é isso?

Além disso, você poderia me dar também um link para o cabeçalho completo do MS DOS?

Foi útil?

Solução

DWORD AT OFFSET 0x3C é o deslocamento do novo cabeçalho EXE, também conhecido como image_nt_headers. Portanto, se você alterar o valor lá, o carregador de PE não poderá encontrar o novo cabeçalho EXE.

Outras dicas

A primeira parte de um PE é o MSDOS Stub; Em 0x3c (onde o seu "A8" está), há o deslocamento para a assinatura do arquivo PE. Se você zerá-lo, o carregador não poderá encontrar a assinatura do PE e se recusar a carregá-lo (ou carregá-lo como apenas um executável do MS-DOS, eu não tentei). Para mais informações, consulte o Especificações de formato de PE.

Suspeito que seja o deslocamento do novo cabeçalho do PE, os 30 primeiros bytes ímpares são o cabeçalho do MS-DOS, que compensa o arquivo em que 'A8' reside em corresponde ao campo na estrutura _IMAGE_DOS_HEADER chamado LONG e_lfanew; // File address of new exe header; É que o valor 'A8' seria parte do novo IMAGE_NT_HEADER que contém esta informação

  • Assinatura do dword;
  • _Image_File_Header FileHeader;
  • _Image_Optional_Header OptionFeLeader;

Os dois primeiros bytes são o cabeçalho original do MS-DOS no executável, como mostra essa constante: WORD IMAGE_DOS_SIGNATURE = 0x5A4D; // MZ; O Image_NT_Header tem essa assinatura para identificar que é um executável para plataformas NT DWORD IMAGE_NT_SIGNATURE = 0x00004550; // PE00;

Você encontrará todas essas informações em um arquivo de cabeçalho chamado pe.h.

O que aconteceu lá foi você acabar com o valor 'A8', o carregador não conseguiu encontrar o IMAGE_NT_HEADER e, portanto, falhou.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top