Kaitai Struct 0.9

good-penguin.png

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-схемы, из которой теперь генерируется документация

>>> Подробности

©  Linux.org.ru