Le problème que j'ai est quand j'ai un script Perl lisant des données (PE exécutable) via STDIN et le flux contient un terminateur de ligne "0A" la conversion en hexa manque. Ensuite, quand je convertis les données hexadécimales, il est corrompu (0A manquant dans le format hexadécimal). Alors, comment puis-je détecter la version "windows" du saut de ligne "0A" en Perl?Perl convertissant le flux binaire en hexadécimal
Note: Linux OS (Perl) est en train de lire un Windows PE
!usr/bin/perl
while($line = <STDIN>)
{
chomp($line);
@bytes = split //, $line;
foreach (@bytes)
{
printf "%02lx", ord $_;
}
}
Exemple d'utilisation:
[[email protected] test]# cat test.exe | perl encoder.pl > output
Wow, c'est embarrassant. J'ai plongé directement dans 'binmode()' et je n'ai même pas vu 'chomp'. –
De plus, vous trouverez 'unpack ('H *', $ chaîne_binaire)' est beaucoup plus efficace que 'split' et' printf '% 02x''. – cjm
a effectué une modification #!/Usr/bin/perl binmode (STDIN); while () { #print $ _; push (@bytes, $ _); } foreach (@bytes) { printf "% 02lx", ord $ _; } –
ekronnenburg