Come posso leggere le intestazioni da un file eseguibile portatile WinNT usando Perl?

StackOverflow https://stackoverflow.com/questions/1418855

  •  07-07-2019
  •  | 
  •  

Domanda

Voglio lavorare con i file PE in Perl e non ho trovato un modulo, quindi penso che scriverò il mio (l'ho già fatto una volta in Delphi).

Ho solo un problema, quando si mappa l'eseguibile su un buffer, come posso cercare ottali come 0x00004550 (IMAGE_NT_SIGNATURE), riconvertirli in stringhe scrivibili ecc?

È stato utile?

Soluzione

esiste un modulo Perl per manipolare eseguibili portatili: < code> Win32 :: Exe .

Non ho idea della tua domanda esatta, ma se vuoi ancora scrivere la tua libreria, Win32 :: Exe potrebbe essere un buon riferimento.

Altri suggerimenti

Per convertire quel valore in una rappresentazione bytestring, usa pack . La costante che stai trattando è un valore a 32 bit little-endian, quindi 'V' nel modello.

$ perl -e 'print pack q[V], 0x00004550' | hd
00000000  50 45 00 00                                       |PE..|
00000004

Vedi perldoc -f pack per i dettagli.

Probabilmente non avrai bisogno di cercare stringhe come " PE \ 0 \ 0 " ;, basta usarle per verificare se il file che stai leggendo in realtà è un file PE. La sezione 'PE' di solito viene subito dopo la sezione DOS ('MZ') che ha il suo campo lunghezza.

(Sono d'accordo che Win32 :: Exe potrebbe valere la pena di dare un'occhiata, a seconda di cosa vuoi fare.)

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