Validation 二进制文件的结构验证

Validation 二进制文件的结构验证,validation,binary,Validation,Binary,我正在研究为各种二进制流正式指定格式的方法,并使用工具检查流是否符合规范。类似于XSD+的任何XML验证工具。或者类似于在二进制级别上工作的极其复杂的grep表达式(最好不要-这真的很难读取) 有人知道有用的规范/工具吗 [理由:我们每天都会收到许多第三方生成的二进制文件,而且很多时候他们使用的是产生无效文件的坏工具。我们想给他们一个工具,他们可以用作验证器,我们不想为每种格式编写特定的工具。]我认为一个很好的例子是Java的.class文件的规范:抽象语法符号一:。另请参见NCBI工具箱:这是

我正在研究为各种二进制流正式指定格式的方法,并使用工具检查流是否符合规范。类似于XSD+的任何XML验证工具。或者类似于在二进制级别上工作的极其复杂的grep表达式(最好不要-这真的很难读取)

有人知道有用的规范/工具吗


[理由:我们每天都会收到许多第三方生成的二进制文件,而且很多时候他们使用的是产生无效文件的坏工具。我们想给他们一个工具,他们可以用作验证器,我们不想为每种格式编写特定的工具。]

我认为一个很好的例子是Java的.class文件的规范:

抽象语法符号一:。另请参见NCBI工具箱:

这是一个有趣的问题,但如果存在这样一种规范语言,我会非常惊讶。这是因为二进制文件的元结构可能性实际上是无限的。与XML相比,XML严格指定了元结构(标记包含其他标记,只有一个属性可以有一个名称等)。即使使用这种结构,为XML编写模式也很困难!我能看到的处理二进制文件格式无限可能性的唯一方法是使用本身允许无限可变性的东西——一种图灵完整编程语言

当然,这并不是说,对于您的特定问题域,无法生成有用的规范语言和处理器。我只是觉得你很难找到一个预制的。我希望这里的答案证明我错了

尝试一下:

  • 注释驱动
  • 条件句部分
  • 表达语言
每个带注释的类都是一个
编解码器
描述,能够生成
编码器
解码器

,同时检查:

  • Java/Python/C++API
  • 漂亮的数字用户线

如果您认为Java的.class文件文档是一个很好的规范示例,请重新考虑Preon。Preon是,并生成类似的文档

实际上,还有一些其他方法可以捕获二进制编码文件的“语法”。ASN.1很有用,但是如果您想要捕获(比如)Java类文件,它不会给您带来很多好处。BSDL、Flavor、BFlavor和一些其他计划也是如此。问题是:有一百万种编码二进制数据的方法,很多二进制压缩技术,我认为这意味着永远不会有完全捕获它的东西,除非语言本身是可扩展的


谷歌协议缓冲区基本上也存在同样的问题。它定义了类似Corba的CDR的东西,只要您不需要更高级的东西,它就很好。Google protocol buffers不允许您捕获Java的类文件格式。

这些问题当然正是XML发明的原因-没有机会切换到它吗?没有。我们必须支持传统格式:(是的,你的想法与我的想法完全一致。但我答应我的老板研究这个问题,所以…很有趣,但对我们来说可能有点太重了。另外,我一直讨厌不能免费获得的规范。NCBI的规范和工具都是免费提供的。例如,DNA序列的定义。它可以作为二进制文件读取/写入(),text(),xml(),…谢谢,但由于我们没有使用Java,这似乎没有什么用处。如果我读对了,我必须将每个协议重新实现为一组Java类,然后使用Preon生成解码器,然后用于测试。我正在寻找更正式、更接近二进制级别的东西(也就是说,我想从比特开始,而不是从比特开始)。这样,我可以使用相同的工具来测试我们的流生成器。还要检查google协议缓冲区DSL:这可能很有用。请将其作为单独的答案添加,以便我可以投票:)