Recientemente se lanzó la última versión de Kaitai Struct 0.9, un lenguaje de descripción y conjunto de herramientas para analizar diversos formatos binarios (por ejemplo, paquetes de red, archivos de imagen/audio/video, bases de datos, archivos comprimidos, contenedores, etc.). A pesar de que el número de versión 0.9 puede parecer poco serio, se trata de un lanzamiento importante que incorpora desarrollos de los últimos 2.5 años. Durante este tiempo, el lenguaje ha evolucionado hasta convertirse en toda una familia de proyectos:
- un compilador que permite crear un parser a partir de un archivo de especificación de formato (.ksy) en varios lenguajes de programación (C++, C#, Construct, Go, Java, JavaScript, Lua, Nim, Perl, PHP, Python, Ruby), así como diagramas en formato GraphViz y especificaciones de formatos legibles por humanos en HTML;
- herramientas para el desarrollo cómodo de especificaciones con control visual simultáneo: Web IDE, visualizador de consola, plugin para Visual Studio Code, Hobbits, Veles, plugin para Hiew, plugin para Binary Ninja;
- módulos para integrar Kaitai Struct en el proceso de construcción para Maven, para Gradle, para Python, para JavaScript/WebPack
- biblioteca de formatos, que en esta versión ya cuenta con 156 descripciones (y otros 78 formatos están en proceso de revisión de pull request).
- biblioteca de algoritmos de compresión Kaitai Compress
- módulo para FUSE — Kaitai FS, que permite montar un archivo como un sistema de archivos utilizando la descripción ksy de su formato
Lenguaje reconocido por GitHub y actualmente utilizado en más de 400 proyectos de código libre / open source para analizar diversos formatos de datos exóticos, desde la ingeniería inversa de archivos de datos de juegos propietarios, hasta el análisis de protocolos de comunicación por satélite..
Entre las principales novedades del lenguaje 0.9 se destacan:
- el soporte para nuevos lenguajes objetivo (Python a través de la biblioteca Construct, Nim, generación de documentación en HTML)
- el soporte completo para el moderno C++ (punteros inteligentes, sin necesidad de gestionar manualmente la memoria, corrección de todas las variantes conocidas de fugas de memoria)
- el soporte para la dirección de tipos anidados mediante una sintaxis del tipo foo::bar::baz
- soporte para la validación de datos leídos según las condiciones descritas (valid)
- cálculo de tamaños de estructuras de datos estáticas en bytes y bits (operadores sizeof y bitsizeof)
- una descripción formal del lenguaje en forma de esquema JSON, desde el que ahora se genera documentación
Fuente: linux.org.ru

