Di recente è stata rilasciata la versione successiva di Kaitai Struct 0.9: un linguaggio di descrizione e strumenti per l'analisi di vari formati binari (ad esempio pacchetti di rete, file di immagini/audio/video, database, archivi, contenitori, ecc.). Nonostante la versione 0.9 dall'aspetto frivolo, si tratta di una versione importante che include gli sviluppi degli ultimi 2.5 anni. Durante questo periodo, la lingua è cresciuta in un'intera famiglia di progetti:
- un compilatore che consente di ottenere un codice sorgente parser già pronto in una varietà di linguaggi di programmazione (C++, C#, Construct, Go, Java, JavaScript, Lua, Nim, Perl, PHP, Python, Ruby) da un formato file delle specifiche (.ksy), nonché diagrammi nel formato GraphViz e specifiche del formato leggibile dall'uomo in HTML;
- strumenti per un comodo sviluppo delle specifiche con controllo visivo simultaneo: IDE Web, visualizzatore della console, plugin per Visual Studio Code, Hobbit, Veles, plugin per Hiew, plugin per Binary Ninja;
- moduli per l'integrazione di Kaitai Struct nel processo di assemblaggio per Maven, per Gradle, per Python, per JavaScript/WebPack
- libreria di formati, che ha già 156 descrizioni in questa versione (e Altri 78 formati sono in fase di revisione della richiesta pull).
- libreria di algoritmi di compressione plug-in Compressa Kaitai
- modulo per FUSE - Kaitai FS, che consente di montare un file come file system, utilizzando la descrizione ksy del suo formato
lingua riconosciuto da GitHub ed è ora utilizzato in più di 400 progetti gratuiti/open source per l'analisi di tutti i tipi di formati di dati esotici, che vanno da reverse engineering di file di dati di gioco proprietarivenendo analisi dei protocolli di comunicazione satellitare.
Tra le principali novità del linguaggio 0.9 è opportuno evidenziare:
- supporto per nuovi linguaggi di destinazione (Python tramite libreria Construct, Nim, generazione di documentazione in HTML)
- supporto completo per il moderno C++ (puntatori intelligenti, nessuna necessità di gestire manualmente la memoria, risolve tutte le perdite di memoria conosciute)
- supporto per indirizzare tipi nidificati tramite sintassi come foo::bar::baz
- supporto per la validazione dei dati letti secondo le condizioni descritte (valido)
- calcolo delle dimensioni delle strutture dati statiche in byte e bit (operatori sizeof e bitsizeof)
- descrizione formale di una lingua nella forma Schemi JSON, da cui ora viene generata la documentazione
Fonte: linux.org.ru