Релиз системы разбора бинарных файлов Kaitai Struct 0.6
Вышел очередной релиз языка разбора произвольных бинарных файлов Kaitai Struct 0.6, приуроченный к конференции FOSDEM 2017. Язык позволяет создавать спецификации произвольных бинарные форматы файлов / пакетов / протоколов, после чего можно:
- Визуализировать данные в этом формате в виде интерактивного дерева объектов, наблюдая каким байтам в дампе соответствуют какие значения:
- Получить наглядную диаграмму формата с помощью GraphViz
- Скомпилировать спецификацию формата в готовую библиотеку парсинга формата на языках C++, C#, Java, JavaScript, Perl, PHP, Python, Ruby
Среди основных нововведений версии 0.6 можно выделить:
- Поддержка невыравненного (unaligned) побитового чтения (удобно поддерживать битовые поля, можно читать потоки битов и т.д.)
- Мощная поддержка метаинформации в .ksy (добавлены поля «title», «license», «ks-version», «ks-debug»), поддержка «doc» на уровне типов
- Enum’ы выведены на уровень типов — т.е. теперь они корректно раскрываются, их можно использовать между разными уровнями вложенности типов (даже если поддержки такой области видимости нет в целевом языке — например, в Python, PHP или JavaScript)
- Идентификатор (id) в атрибутах в seq теперь опционален; если его не указывать, будет автоматически сгенерирован численный идентификатор — это удобно для быстрой разметки неизвестных форматов
- Вычислимые instances теперь могут использовать «if» и «enum»
- Поддержка ссылок на внешние типы данных — можно использовать «type: xxx», где xxx не объявлен в текущем .ksy-файле — это создаст правильные инструкции import / include в предположении, что тип xxx описан в каком-то другом .ksy файле, который будет также собран вместе с этим проектом
- В языке выражений теперь можно использовать числовые литералы с визуальными разделителями (например,»123_456_789» или »0b0101_0011»), а также метод «to_s» у целочисленных типов для преобразования к строке
- Множество других исправлений ошибок и оптимизаций (как по проекту в целом, например, в механизме выведения типов, так и по компиляторам конкретных целевых языков)
© OpenNet