Perl Konvertierung von Binär-stream an hex
Das problem, das ich habe ist, wenn ich ein Perl-Skript zum Auslesen der Daten (PE EXE-Datei) über STDIN und der stream enthält ein Zeilenende-Zeichen "0A" bei der Konvertierung zu hex findet es. Wenn ich dann konvertieren des hex-Daten zurück, es beschädigt ist (fehlende 0A in hex-format). Also, wie kann ich erkennen, das "windows" - version von line feed "0A" in Perl?
Hinweis: unter dem Betriebssystem Linux (Perl) ist das Lesen einer Windows-PE -
!usr/bin/perl
while($line = <STDIN>)
{
chomp($line);
@bytes = split //, $line;
foreach (@bytes)
{
printf "%02lx", ord $_;
}
}
Beispiel:
[root@mybox test]# cat test.exe | perl encoder.pl > output
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der Schleife sind, laufen Sie
chomp
auf jeden Eingang. Dies ist das entfernen, was der Wert ist derzeit in$/
vom Ende der Zeile. Chancen sind, ist dies0x0a
, und das ist, wo der Wert hingeht. Versuchen Siechomp($line)
aus der Schleife.Im Allgemeinen, mit der Linie orientiert sich das Lesen nicht sinnvoll für binäre Dateien, die sich nicht zeilenorientiert. Sie sollten einen Blick auf die untere Ebene
read
- Funktion, die ermöglicht Ihnen das Lesen einen block von bytes aus der Datei, ohne dass man sich was diese bytes sind. Sie können dann Ihre Daten in Blöcken statt Linien.binmode()
und gar nicht sehen, diechomp
.unpack('H*', $binary_string)
ist sehr effizienter alssplit
undprintf '%02x'
.