Come posso leggere le intestazioni da un file eseguibile portatile WinNT usando Perl?
-
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?
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.)