Perl将二进制流转换为十六进制

前端之家收集整理的这篇文章主要介绍了Perl将二进制流转换为十六进制前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我遇到的问题是当我有一个Perl脚本通过STDIN读取数据(PE可执行文件)并且流包含行终止符“0A”时,转换为十六进制错过了它.然后,当我将十六进制数据转换回来时,它已损坏(以十六进制格式丢失0A).那么如何在Perl中检测换行符“0A”的“ windows”版本呢?

注意:Linux OS(Perl)正在读取Windows PE

!usr/bin/perl

while($line = <STDIN>)
{
    chomp($line);
    @bytes = split //,$line;
    foreach (@bytes)
    {
        printf "%02lx",ord $_;
    }
}

用法示例:

[root@myBox test]# cat test.exe | perl encoder.pl > output

解决方法

在循环中,您在每个输入行上运行chomp.这将从您的行末端删除当前$/中的任何值.有可能这是0x0a,这就是值的来源.尝试从循环中删除chomp($line).

通常,使用面向行的读取对于本身不是面向行的二进制文件没有意义.您应该查看较低级别的读取功能,该功能允许您从文件中读取一个字节块,而无需关心这些字节是什么.然后,您可以使用块而不是行来处理数据.

猜你在找的Perl相关文章