Tout récemment, la prochaine version de Kaitai Struct 0.9 a été publiée - un langage de description et des outils pour analyser divers formats binaires (par exemple, les paquets réseau, les fichiers image/audio/vidéo, les bases de données, les archives, les conteneurs, etc.). Malgré le numéro de version 0.9 qui semble frivole, il s'agit d'une version majeure qui inclut les développements des 2.5 dernières années. Pendant ce temps, le langage s'est développé en toute une famille de projets :
- un compilateur qui vous permet d'obtenir un code source d'analyseur prêt à l'emploi dans une variété de langages de programmation (C++, C#, Construct, Go, Java, JavaScript, Lua, Nim, Perl, PHP, Python, Ruby) à partir d'un format fichier de spécification (.ksy), ainsi que des diagrammes au format GraphViz et des spécifications de format lisibles par l'homme en HTML ;
- des outils pour l'élaboration pratique de spécifications avec contrôle visuel simultané : EDI Web, visualiseur de console, plugin pour Visual Studio Code, les hobbits, Veles, plugin pour Hiew, plugin pour Binary Ninja;
- modules pour intégrer Kaitai Struct dans le processus d'assemblage pour Maven, pour Gradle, pour Python, pour JavaScript/WebPack
- bibliothèque de formats, qui compte déjà 156 descriptions dans cette version (et 78 formats supplémentaires sont en cours d’examen des demandes de tirage).
- bibliothèque d'algorithmes de compression de plug-ins Compresse Kaitai
- module pour FUSE - Kaitai FS, qui permet de monter un fichier en tant que système de fichiers, en utilisant la description ksy de son format
Langue reconnu par GitHub et est maintenant utilisé dans plus de 400 projets gratuits/open source pour analyser toutes sortes de formats de données exotiques, allant de rétro-ingénierie des fichiers de données de jeu propriétairesjouir analyse des protocoles de communication par satellite.
Parmi les principales innovations du langage 0.9, il convient de souligner :
- support des nouveaux langages cibles (Python via la librairie Construct, Nim, génération de documentation en HTML)
- prise en charge complète du C++ moderne (pointeurs intelligents, pas besoin de gérer manuellement la mémoire, corrige toutes les fuites de mémoire connues)
- prise en charge de l'adressage des types imbriqués via une syntaxe telle que foo::bar::baz
- prise en charge de la validation des données lues selon les conditions décrites (valide)
- calculer les tailles des structures de données statiques en octets et en bits (opérateurs sizeof et bitsizeof)
- description formelle d'une langue sous la forme Schémas JSON, d'où maintenant la documentation est générée
Source: linux.org.ru