代码之家  ›  专栏  ›  技术社区  ›  gabr

二进制文件的结构验证

  •  4
  • gabr  · 技术社区  · 17 年前

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

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

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

    6 回复  |  直到 16 年前
        1
  •  3
  •   Wilfred Springer    16 年前

    如果您认为Java的.class文件文档是一个规范的好例子,请重新考虑Pron。Preon是 capturing it entirely 并生成文档,如 this .

    实际上还有其他一些捕获二进制编码文件的“语法”的计划。ASN.1很有用,但是如果你想捕获-java类文件,它不会给你带来很多里程。同样适用于BSDL、Flavor、BFlavor和其他一些计划。问题是:二进制数据有无数种编码方式,大量的二进制压缩技术,我认为这意味着 从未 除非语言本身是可扩展的,否则要完全捕获它。

    谷歌协议缓冲区基本上也有同样的问题。它定义了一些类似CORBA的CDR的东西,并且很好,只要您不需要更高级的东西。谷歌协议缓冲区不允许您捕获Java的类文件格式。

        2
  •  3
  •   dfa    16 年前

    试一试 Preon :

    • 注释驱动
    • 条件部分
    • 表达语言

    每个带注释的类都是 Codec 能够同时生成 Encoder 和A Decoder .

        3
  •  1
  •   anon    17 年前

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

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

        4
  •  1
  •   dfa    17 年前

    也检查 Google Protocol Buffers :

    • Java/Python/C++API
    • 尼斯DSL
        5
  •  0
  •   Itay Maman    17 年前

    我认为Java规范的一个很好的例子是.class文件: http://java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.html

        6
  •  0
  •   Pierre    17 年前

    摘要语法符号一: ASN.1 . 另请参见NCBI工具箱: http://www.ncbi.nlm.nih.gov/Sitemap/Summary/asn1.html