Domanda

Ho visto un valore strano posto in intestazione 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 <-

Non so che cosa è A8 facendo lì, ma se lo sostituisco con gli zeri il mio programma non esegue.

In una parola: che cosa è che

?

Inoltre, potreste darmi anche link alla intestazione completa di MS DOS?

È stato utile?

Soluzione

DWORD a 0x3C di offset è l'offset della nuova intestazione EXE, alias IMAGE_NT_HEADERS. Quindi, se si modifica il valore lì, il caricatore PE non riesce a trovare la nuova intestazione EXE.

Altri suggerimenti

La prima parte di un PE è lo stub MSDOS; a 0x3C (in cui il vostro "A8" è) c'è l'offset per la firma file PE. Se zero,, il caricatore non sarà in grado di trovare la firma del PE, e si rifiuterà di caricarlo (o caricarlo come un semplice eseguibile MS-DOS, non ho provato). Per ulteriori informazioni, consultare la PE formato specifiche .

Ho il sospetto che sia l'offset per la nuova intestazione PE, i primi 30 byte dispari sono l'intestazione MS-DOS, che ha compensato nel file in cui risiede 'A8' in corrisponde al campo nel _IMAGE_DOS_HEADER struttura chiamata LONG e_lfanew; // File address of new exe header; E 'quel valore 'A8' sarebbe parte del nuovo IMAGE_NT_HEADER che contiene tali informazioni

  • DWORD Firma;
  • _IMAGE_FILE_HEADER FileHeader;
  • _IMAGE_OPTIONAL_HEADER OptionalHeader;

I primi due byte sono originali MS-DOS intestazione nell'eseguibile come dimostra questa costante: WORD IMAGE_DOS_SIGNATURE = 0x5A4D; // MZ; L'IMAGE_NT_HEADER ha questa firma per identificare che si tratta di un eseguibile per NT piattaforme DWORD IMAGE_NT_SIGNATURE = 0x00004550; // PE00;

Troverete tutte queste informazioni in un file header chiamato pe.h.

Quello che è successo lì è che si spazzato via il valore 'A8', il caricatore non riusciva a trovare il IMAGE_NT_HEADER e, quindi, non è riuscita.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top