Vor kurzem wurde die neueste Version von Kaitai Struct 0.9 veröffentlicht – einer Sprache zur Beschreibung und einem Werkzeugset für das Parsen verschiedenster binärer Formate (z. B. Netzwerkpakete, Bild-/Audio-/Video-Dateien, Datenbanken, Archive, Container usw.). Trotz der unauffällig klingenden Versionsnummer 0.9 handelt es sich um ein bedeutendes Release, das Entwicklungen der letzten 2,5 Jahre umfasst. In dieser Zeit hat sich die Sprache zu einer ganzen Familie von Projekten entwickelt:
- einem Compiler, der es ermöglicht, aus einer Formatbeschreibung (.ksy) den endgültigen Parser-Code in zahlreichen Programmiersprachen (C++, C#, Construct, Go, Java, JavaScript, Lua, Nim, Perl, PHP, Python, Ruby) zu generieren, sowie Diagramme im GraphViz-Format und menschlich lesbare Formatbeschreibungen in HTML;
- Werkzeuge für eine bequeme Entwicklung von Spezifikationen mit gleichzeitiger visueller Kontrolle: Web IDE, Konsolen-Visualisierer, Plugin für Visual Studio Code, Hobbits, Veles, Plugin für Hiew, Plugin für Binary Ninja;
- Module zur Integration von Kaitai Struct in den Build-Prozess für Maven, für Gradle, für Python, für JavaScript/WebPack
- Bibliothek von Formaten, die in diesem Release bereits 156 Beschreibungen umfasst (und weitere 78 Formate sich im Review-Prozess des Pull-Requests befinden).
- Bibliothek an einbindbaren Kompressionsalgorithmen Kaitai Compress
- Modul für FUSE — Kaitai FS, der es ermöglicht, eine Datei wie ein Dateisystem zu mounten, wobei die ksy-Beschreibung seines Formats verwendet wird
Sprache anerkannt von GitHub und wird jetzt in über 400 Free / Open Source-Projekten verwendet, um verschiedene exotische Datenformate zu parsen, angefangen bei Reverse Engineering von proprietären Spieldaten-Dateien, bis hin zu der Analyse von Kommunikationsprotokollen von Satelliten.
Zu den wichtigsten Neuerungen der Sprache 0.9 gehören:
- Unterstützung neuer Zielsprachen (Python über die Construct-Bibliothek, Nim, Generierung von Dokumentation in HTML)
- vollständige Unterstützung moderner C++ (Smart Pointers, keine Notwendigkeit, den Speicher manuell zu verwalten, Behebung aller bekannten Speicherleckvarianten)
- Unterstützung der Adressierung von verschachtelten Typen über die Syntax foo::bar::baz
- Unterstützung der Validierung gelesener Daten gemäß den beschriebenen Bedingungen (gültig)
- Berechnung der Größen statischer Datentypen in Bytes und Bits (Operatoren sizeof und bitsizeof)
- formale Beschreibung der Sprache in Form von JSON-Schema, aus dem nun Dokumentation generiert wird
Quelle: linux.org.ru

