Vor kurzem wurde die neue Version von Kaitai Struct 0.9 veröffentlicht – einer Beschreibungssprache und einem Werkzeug zur Analyse von verschiedenen Binärformaten (zum Beispiel Netzwerkpaketen, Dateien mit Bildern/Audios/Videos, Datenbanken, Archiven, Containern usw.). Trotz der nicht ernst wirkenden Versionsnummer 0.9 handelt es sich um ein großes Release, das Entwicklungen der letzten 2,5 Jahre umfasst. In dieser Zeit ist die Sprache zu einer ganzen Familie von Projekten gewachsen:
- einem Compiler, der es ermöglicht, aus einer Dateispezifikation (.ksy) einen fertigen Parser in vielen Programmiersprachen (C++, C#, Construct, Go, Java, JavaScript, Lua, Nim, Perl, PHP, Python, Ruby) zu generieren, sowie Diagramme im GraphViz-Format und menschenlesbare Formatspezifikationen in HTML;
- Werkzeuge zur komfortablen Entwicklung von Spezifikationen mit gleichzeitigem visuellem Monitoring: Web IDE, Konsolenvisualisierer, 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
- eine Formatbibliothek, die in diesem Release bereits 156 Beschreibungen umfasst (und weitere 78 Formate gerade in der Überprüfung eines Pull-Requests sind).
- eine Bibliothek für integrierte Kompressionsalgorithmen Kaitai Compress
- ein Modul für FUSE – Kaitai FS, das es ermöglicht, eine Datei als ein Dateisystem zu mounten, wobei die ksy-Beschreibung ihres Formats verwendet wird
Sprache wurden anerkannt von GitHub und wird derzeit in mehr als 400 freien / Open-Source-Projekten zur Analyse von verschiedenen exotischen Datenformaten verwendet, angefangen von der Rückentwicklung von Datenformaten proprietärer Spiele, bis hin zu der Analyse von Kommunikationsprotokollen von Satelliten..
Zu den wichtigsten Neuerungen in der Sprache 0.9 gehören:
- Unterstützung neuer Zielsprachen (Python über die Bibliothek Construct, Nim, Generierung von Dokumentation in HTML)
- vollständige Unterstützung moderner C++ (Smart-Pointer, keine Notwendigkeit zur manuellen Speichermanagement, Behebung aller bekannten Speicherlecks)
- Unterstützung der Adressierung von geschachtelten Typen durch Syntax wie foo::bar::baz
- Unterstützung der Validierung gelesener Daten gemäß den beschriebenen Bedingungen (valid)
- Berechnung der Größen statischer Datenstrukturen in Bytes und Bits (Operatoren sizeof und bitsizeof)
- formale Beschreibung der Sprache in Form von JSON-Schemas, aus dem jetzt Dokumentation generiert wird
Quelle: linux.org.ru

