Wie kann ich die Header aus einer winNT -tragbaren ausführbaren Datei mit Perl lesen?
-
07-07-2019 - |
Frage
Ich möchte mit PE -Dateien in Perl arbeiten und fand kein Modul, also denke ich, dass ich meine eigene schreiben werde (das hat das bereits einmal in Delphi gemacht).
Ich habe nur ein Problem bekommen, wenn ich die ausführbare Datei auf einen Puffer zuordnen kann, wie kann ich nach Oktalen wie 0x00004550 (Image_NT_NIGNATION) suchen, sie in schriftliche Zeichenfolgen zurückkehren usw.?
Lösung
Dort ist Ein Perl -Modul zur Manipulation tragbarer Ausführbarungen: Win32::Exe
.
Ich habe keine Ahnung auf Ihre genaue Frage, aber wenn Sie noch Ihre eigene Bibliothek schreiben möchten, Win32::Exe
Könnte eine gute Referenz sein.
Andere Tipps
Verwenden Sie zur Konvertierung dieses Wertes in eine Bytestring -Darstellung pack
. The constant you are dealing is a little-endian 32 bit value, so 'V' in the template.
$ perl -e 'print pack q[V], 0x00004550' | hd
00000000 50 45 00 00 |PE..|
00000004
Sehen perldoc -f pack
für Details.
Sie müssen wahrscheinlich nicht nach Zeichenfolgen wie "pe 0 0" suchen. Verwenden Sie sie einfach, um zu überprüfen, ob die Datei, die Sie tatsächlich lesen, tatsächlich eine PE -Datei ist. Der Abschnitt "PE" erfolgt normalerweise direkt nach dem Abschnitt DOS ('MZ'), der ein eigenes Feld für eigene Länge hat.
(I stimme zu Win32::Exe
kann einen Blick wert sein, je nachdem, was Sie tun möchten.)