The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Вышел язык спецификации бинарных форматов Kaitai Struct 0.5"
Отправлено opennews, 10-Ноя-16 19:52 
Проект Kaitai представил (http://kaitai.io/news/2016-11-09.html) новый релиз Kaitai Struct версии 0.5 (http://kaitai.io/news/2016-11-09.html), декларативного языка описания бинарных форматов и структур данных. Как и прежде, основная идея проекта заключается в том, что практически любой формат файла или структуру сетевого протокола можно описать на Kaitai Struct, составив исходный файл .ksy, который затем компилируется (с помощью прилагаемого компилятора ksc) в готовый парсер на любом из поддерживаемых языков программирования.


Основная сфера применения подобного решения - разбор всевозможных существующих (зачастую закрытых и проприетарных) форматов (офисных, мультимедийных и т.д.) и протоколов. Благодаря наличию продвинутых инструментов отладки и визуализации, Kaitai Struct нашел свое применение и в быстром реверс-инжиниринге неизвестных форматов, а также в digital forensics. Ряд организаций, занимающийся хранением исторических цифровых архивов, взяли Kaitai Struct на вооружение как стандарт описания форматов данных. Компилятор Kaitai Struct распространяется под лицензией GPLv3, большинство runtime - под MIT. Для желающих попробовать компилятор без установки подготовлен JavaScript-вариант (http://kaitai.io/repl/) компилятора KS с примерами.


Наиболее заметные изменения:

-  Поддержка новых целевых языков


-  Полная поддержка целевого языка C++ (на базе STL), а также новые целевые языки PHP и Perl:


-  Вывод описаний форматов в виде наглядных человеко-читаемых схем (через GraphViz). Подборка примеров визуализаций доступна в галерее (http://imgur.com/a/LWOGq);

-  Многочисленные доработки и проверки для полноценной поддержки как Python 2, так и Python 3.

-  Как и раньше, кроме новых языков, все еще поддерживаются C#, Java, JavaScript, Python, Ruby.

-  Новые инструменты для разработки, отладки и визуализации


-  Консольный визуализатор ksv обновлен и теперь работает не только на UNIX-консолях (Linux, *BSD, OS X), но и под Windows:


-  Появился экспериментальный GUI-визуализатор (https://github.com/kaitai-io/kaitai_struct_gui) на Java/Swing:

-  Начата разработка интегрированной среды на основе web-технологий, работающей в браузере и совмещающей в себе редактор для создания .ksy-файлов, компилятор, визуализатор дерева объектов, hex viewer и менеджер библиотеки ksy-форматов. Среда реализована на HTML/JavaScript, но благодаря технологии ScalaJS, внутри у нее использоваться абсолютно такой же компилятор, как и в большой, "десктопной" версии Kaitai Struct. Доступна онлайн демо-версия (https://kt.pe/kaitai_struct_webide/).


-  Новые возможности языка .ksy


-  Switch-подобный механизм определения типов данных на основе условия позволяет отказаться от кучи однотипных if'ов:


-  Цикл repeat-until позволяет объявить массив элементов, повторяющихся до достижения определенного условия. Для ссылки на текущий элемент следует использовать специальную переменную `_`. Например, следующее объявление задает массив целых знаковых 4-байтовых чисел, заканчивающийся -1:


   - id: elements
     type: s4
     repeat: until
     repeat-until: _ == -1

Более сложный пример — массив сегментов (тип segment - пользовательский, объявлен отдельно), заканчивающийся чтением сегмента с кодом "segment_code::end":


   - id: segments
     type: segment
     repeat: until
     repeat-until: _.code == segment_code::end


-  Каждое поле теперь может аннотироваться строчкой человеко-читаемой документации. Кроме видимости в .ksy-файле, эта документация будет выгружаться в doc-систему целевого языка (JavaDoc, JSDoc, YARD/RDoc и т.п.):


-  В язык выражений добавлены операции над потоком (`_io`). С их помощью можно, например, адресовать структуры относительно конца потока (а не только относительно начала):


   instances:
     from_start: # 0x10 байт, начиная с 0x40 байта от начала
       pos: 0x40
       size: 0x10
     from_end:   # 0x10 байт, начиная с 0x40 байта с конца
       pos: _io.size - 0x40
       size: 0x10

Или, например, удобно делать условные структуры, которые будут парситься, только если что-то еще осталось в потоке:


   seq:
     # основной элемент, присутствует всегда
     - id: main_element
       type: ...
     # дополнительный элемент, будет зачитан, только в потоке еще что-то есть
     - id: aux_element
       type: ...
       if: not _io.eof


-  Важные мелочи


-  Существенно улучшена диагностика ошибок, усилена строгость проверки исходных .ksy. При обнаружении ошибки компилятор теперь генерирует понятные ссылки на конкретные элементы, в которых проблема и предлагает варианты решения. При обнаружении ошибки с данными в runtime в debug-режиме теперь производится попытка оставить как можно больше данных в структуре (включая не полностью заполненные классы), чтобы легче было понять, где именно произошел сбой парсинга.

-  Стандартизация сборки: в дополнение к ранее собираемым (https://rubygems.org/gems/kaitai-struct) runtime-модулям для Ruby в виде gem, появились доступные для инсталляции из соответствующих репозитариев пакеты для Python в PyPI (https://pypi.python.org/pypi?:action=display&name=kaitaistru...) и для Java-платформы (https://search.maven.org/#artifactdetails%7Cio.kaitai&#...). Авторы призывают помочь с упаковкой runtime-библиотек и для других языков.

URL: http://kaitai.io/news/2016-11-09.html
Новость: http://www.opennet.ru/opennews/art.shtml?num=45470

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру