构建结构化二进制数据解析器的框架?

时间:2011-03-14 23:20:16

标签: parsing code-generation binary-data

我有一些Pragmatic-Programmer类型代码生成的经验:以平台中立格式指定数据结构,并为使用这些数据结构文件的代码生成器编写模板,并生成将原始字节拉入特定语言的代码数据结构,对数字数据进行缩放,打印出数据等。好的实用(TM)思想是(a)我可以通过修改我的规范文件和重新生成源(这是DRY和所有这些来改变数据结构) )和(b)我可以通过修改模板添加可以为我的所有结构生成的其他函数。

我使用的是一个名为Jeeves的Perl脚本,但它是通用的,我想编写的任何函数来操作我从头开始编写的数据。

是否有任何框架非常适合为结构化二进制数据创建解析器?我读过Antlr的内容表明这太过分了。我目前感兴趣的目标语言是C#,C ++和Java,如果重要的话。

一如既往地谢谢。

编辑:我会在这个问题上给予赏金。如果有任何我应该查看的区域(搜索的关键词)或其他攻击你自己开发的问题的方法,我很乐意听到它们。

2 个答案:

答案 0 :(得分:4)

你也可以看一个相对较新的项目Kaitai Struct,它提供了一个用于此目的的语言,并且还有一个很好的IDE: Kaitai.io

答案 1 :(得分:2)

您可能会发现ASN.1很有趣,因为它提供了一种描述您可能正在处理的数据的简单方法。如果使用ASN.1抽象地描述数据,则需要一种方法将抽象数据映射到具体的二进制流,ECN (Encoding Control Notation)可能是正确的选择。

New Jersey Machine Toolkit实际上集中在与指令集相对应的二进制数据流上,但我认为这只是二进制流的超集。它具有非常好的设施,可以根据位串来定义字段,并自动生成这样的访问器和生成器。这可能特别有用 如果您的二进制数据结构包含指针到数据流的其他部分。