ehd*_*hdr 15 scripting patch binary-data fileparsing
我正在寻找脚本(或更高级别的编程)语言(或者例如Python或类似语言的模块),以便毫不费力地分析和操作文件中的二进制数据(例如核心转储),就像Perl允许非常流畅地操作文本文件一样.
我想要做的事情包括以各种形式(二进制,十进制,十六进制)呈现数据的任意块,将数据从一个endianess转换为另一个endianess,等等.也就是说,你通常会使用C或汇编的东西,但我是寻找一种语言,允许非常快速地编写一小段代码用于高度特定的一次性目的.
有什么建议?
non*_*one 27
我想要做的事情包括以各种形式(二进制,十进制,十六进制)呈现数据的任意块,将数据从一个endianess转换为另一个endianess,等等.也就是说,你通常会使用C或汇编的东西,但我是寻找一种语言,允许非常快速地编写一小段代码用于高度特定的一次性目的.
好吧,虽然它看似违反直觉,但我发现erlang非常适合这种情况,即由于它对模式匹配的强大支持,甚至是字节和位(称为" Erlang位语法 ").这使得创建甚至非常高级的程序非常容易,这些程序可以处理在字节上甚至在位级别上检查和操作数据:
自2001年以来,函数语言Erlang带有一个面向字节的数据类型(称为二进制),并带有用于对二进制进行模式匹配的结构.
并引用informIT.com:
(Erlang)与二进制类型结合使用时,模式匹配真的开始变得有趣.考虑从网络接收数据包然后处理它们的应用程序.分组中的四个字节可以是网络字节顺序分组类型标识符.在Erlang中,您只需要一个可以将其转换为内部处理数据结构的processPacket函数.它看起来像这样:
processPacket(<<1:32/big,RestOfPacket>>) ->
% Process type one packets
...
;
processPacket(<<2:32/big,RestOfPacket>>) ->
% Process type two packets
...
Run Code Online (Sandbox Code Playgroud)
因此,erlang具有内置的模式匹配支持,并且它是一种功能性语言,非常具有表现力,例如参见erlang中ueencode的实现:
uuencode(BitStr) ->
<< (X+32):8 || <<X:6>> <= BitStr >>.
uudecode(Text) ->
<< (X-32):6 || <<X:8>> <= Text >>.
Run Code Online (Sandbox Code Playgroud)
有关介绍,请参阅Erlang中的Bitlevel Binaries和Generalized Comprehension.您可能还想查看以下一些指针: