Проверка структуры для двоичных файлов - PullRequest
4 голосов
/ 12 июня 2009

Я ищу способы формального указания формата для различных двоичных потоков и использования инструмента для проверки потоков на соответствие спецификации. Что-то вроде XSD + любой из инструментов проверки для XML. Или, как чрезвычайно сложное выражение grep, работающее на двоичном уровне (желательно нет - это было бы действительно трудно читать).

Кто-нибудь знает спецификацию / инструмент, который будет полезен?

[Обоснование: мы ежедневно получаем много сторонних двоичных файлов, и они часто используют плохие инструменты, которые создают недопустимые файлы. Мы хотим дать им инструмент, который они могли бы использовать в качестве валидатора, и мы не хотим писать специальный инструмент для каждого формата.]

Ответы [ 6 ]

3 голосов
/ 21 августа 2009

Если вы считаете, что документация файлов Java .class является хорошим примером спецификации, пересмотрите взгляд на Preon. Preon захватывает его полностью и генерирует документацию наподобие this .

На самом деле есть несколько других инициатив для захвата «синтаксиса» двоичных кодированных файлов. ASN.1 полезен, но он не даст вам большого пробега, если вы собираетесь захватывать, скажем, файлы классов Java. То же самое касается BSDL, Flavor, BFlavor и нескольких других инициатив. Проблема в том, что существует миллион способов кодирования двоичных данных, множество методов двоичного сжатия, и я думаю, это означает, что никогда не будет чем-то, что захватит его полностью, если только сам язык не расширяемый.

Буферы протокола Google в основном имеют ту же проблему. Он определяет что-то вроде CDR Корбы, и это хорошо, если вам не нужно что-то более продвинутое. Буферы протокола Google не позволят вам захватить формат файла класса Java.

3 голосов
/ 12 июня 2009

попробуй Преон :

  • управляемая аннотация
  • условных частей
  • язык выражения

каждый аннотированный класс представляет собой описание Codec, способное генерировать как Encoder, так и Decoder.

1 голос
/ 13 июня 2009

проверьте также Буферы протокола Google :

  • API Java / Python / C ++
  • хороший DSL
1 голос
/ 12 июня 2009

Это интересный вопрос, но я был бы очень удивлен, если бы существовал такой язык спецификации. Это связано с тем, что возможности мета-структуры двоичных файлов практически бесконечны. Сравните это с XML, где мета-структура (теги содержат другие теги, только один атрибут может иметь одно имя и т. Д.) Строго указана. И даже с этой структурой писать схемы для XML сложно! Единственный способ справиться с бесконечными возможностями двоичных форматов файлов - это использовать что-то, что само по себе допускает бесконечную изменчивость - язык программирования, полный по Тьюрингу.

Это, конечно, не означает, что для вашей конкретной проблемной области не может быть создан полезный язык спецификации и процессор для него. Я просто думаю, что вам будет трудно найти заранее построенный. Я надеюсь, что ответы здесь докажут, что я не прав!

0 голосов
/ 12 июня 2009

Абстрактный синтаксис Нотация первая: ASN.1 . Смотрите также Инструментарий NCBI: http://www.ncbi.nlm.nih.gov/Sitemap/Summary/asn1.html

0 голосов
/ 12 июня 2009

Я думаю, хорошим примером является спецификация файлов Java .class: http://java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...