有没有可用的工具可以根据示例输入的语料库生成语法,类似于HotFuzz对网络协议所做的操作?

例如,给定一组MP3文件,我正在寻找该工具将生成BNF语法来描述MP3的格式。

#1 楼

我也没有使用过,但是HotFuzz所基于的Peach Fuzzer具有用于对文件进行模糊处理的“ Peach Fuzz Bang” GUI。这会使程序崩溃,而不能确定描述所有有效输入的确切语法。

此外,严格来说,在数学上不可能完成您要的操作。如果计算机仅通过阅读该语言的文本就能全面学习该语言,则机器翻译将是一个已解决的问题。 (这是一个稍微差的类比,因为并非所有人类语言都是上下文无关的,但想法很明确。)

评论


我可能显示出我的无知,但似乎应该不可能出现问题,对吗?给定一堆示例数据,我应该能够区分并确定一般结构(例如4字节的标头保持不变,然后是4字节的int,也许跟在以NULL结尾的字符串等)。为什么这样做是不可能的?

–mrduclaw
2013年4月2日,凌晨3:14

@mrduclaw:只是您问题的标题是不可能的一般部分,并且是研究的主题。如果您只想弄清楚一组二进制文件的公共头结构,请参阅此SO问题,它有一些不错的答案。

–丹尼尔·W·斯坦布鲁克(Daniel W. Steinbrook)
2013年4月2日,下午3:29

伟大的论文建议,似乎远非不可能,谢谢!

–mrduclaw
2013年4月2日,下午3:36

Angluin在L *上的论文提供了一个证明,即如果有预言家可以回答成员查询,则可以在多项式时间内实现语法推断。本文包括对语法推理其他算法性能的描述和讨论。不过,Polyglot使用的方法可能会更好地扩展。

–马修堂
13年4月2日在9:22



以下是一些有关基于病毒多态引擎的二进制分析来导出上下文无关文法的技术的论文[1,2,3]。我不确定它在这里是否真的有用...但是,也许您可​​以找到它的一些用法。

–恐怖
13年4月2日在17:40