Cовсем недавно вышла очередная версия Kaitai Struct 0.9 — языка описания и инструментария парсинга всевозможных бинарных форматов (например, сетевых пакетов, файлов с изображениями/аудио/видео, баз данных, архивов, контейнеров и т. д.). Несмотря на несерьезно выглядящий номер версии 0.9 — это крупный релиз, включающий в себя наработки за последние 2.5 года. За это время язык вырос до целого семейства проектов:
- компилятор, позволяющий из файла спецификации формата (.ksy) получить готовый исходник парсера на множестве языков программирования (C++, C#, Construct, Go, Java, JavaScript, Lua, Nim, Perl, PHP, Python, Ruby), а также диаграммы в формате GraphViz и человеко-читаемые спецификации форматов в HTML;
- инструменты для удобной разработки спецификаций с одновременным визуальным контролем: Web IDE, консольный визуализатор, плагин для Visual Studio Code, Hobbits, Veles, плагин для Hiew, плагин для Binary Ninja;
- модули для интеграции Kaitai Struct в процесс сборки для Maven, для Gradle, для Python, для JavaScript/WebPack
- библиотека форматов, насчитывающая в этом релизе уже 156 описаний (и еще 78 форматов находятся в процессе pull request review).
- библиотека подключаемых алгоритмов компрессии Kaitai Compress
- модуль для FUSE - Kaitai FS, позволяющий замонтировать файл, как файловую систему, используя ksy-описание его формата
Язык признан GitHub и используется сейчас в более, чем 400 free / open source проектах для парсинга всевозможных экзотических форматов данных, начиная от реверс-инжиниринга файлов данных проприетарных игр, кончая разбором протоколов связи спутников.
Из основных новшеств языка 0.9 стоит выделить:
- поддержка новых целевых языков (Python через библиотеку Construct, Nim, генерацию документации в HTML)
- полноценную поддержку современных C++ (smart pointers, отсутствие необходимости вручную управлять памятью, исправление всех известных вариантов утечек памяти)
- поддержку адресации вложенных типов через синтаксис вида
foo::bar::baz
- поддержку валидации прочитанных данных по описанным условиям (
valid
) - вычисление размеров статических структур данных в байтах и битах (операторы
sizeof
иbitsizeof
) - формальное описание языка в виде JSON-схемы, из которой теперь генерируется документация
>>> Подробности