The OpenNET Project / Index page

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

форумы  правила/FAQ  поиск  регистрация  вход/выход  слежка  RSS
"Выпуск языка описания бинарных форматов Kaitai Struct 0.7"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Выпуск языка описания бинарных форматов Kaitai Struct 0.7"  +/
Сообщение от opennews (??) on 23-Мрт-17, 17:19 
Доступен (http://kaitai.io/news/2017-03-22.html) релиз декларативного языка описания бинарных форматов файлов и протоколов Kaitai Struct 0.7 (http://kaitai.io/). Язык позволяет описывать произвольные бинарные форматы (сетевые пакеты, архивы, контейнерные форматы, файловые системы, форматы изображений, видео и т.д.) в декларативном виде. Полученное описание с помощью компилятора ksc можно:

-  Транслировать в готовый парсер на любом из 8 поддерживаемых целевых языков программирования (C++, C#, Java, JavaScript, Perl, PHP, Python, Ruby),
-  Визуально исследовать с помощью предлагаемой IDE (https://ide.kaitai.io/) любой файл в описанном формате:


-  Представить в виде наглядной диаграммы

В новой версии языка доступны:

-  Импорт .ksy-файлов друг в друга для создания масштабных многофайловых проектов - см. "meta/import" - в том числе с обращением к атрибутам типов из других файлов. Используемый для этого ранее механизм opaque типов отключен по умолчанию (можно включить опцией "--opaque-types").-  Структуры неопределенной длины, терминируемые байтом (ранее такое поддерживалось только для строк) - см. "terminator", "include", "consume".-  "pad-right" для более удобной обработки структур с паддингом справа (например, строк, помещенных в область фиксированного размера и дополненных справа нулями или пробелами)-  Гибкое управление отношением parent-child: с помощью "parent" можно форсировать родителя для дочернего объекта, отличного от текущего объекта по умолчанию-  Вычислимые instances теперь могут использовать "_parent"-  Новый атрибут "doc-ref" в типах и атрибутах может использоваться для представления ссылок на внешнюю документацию (удобно, если описание формата соответствует какому-то формальному документу)-  Процесс компиляции четко разделен на 3 фазы: парсинг YAML, прекомпиляция (единая для всех целевых языков) и компиляция (в конкретный целевой язык); такое решение позволило унифицировать обработку ошибок и значительно упростить сами компиляторы.-  Существенно переработан механизм определения ошибок: теперь все рапортуемые компилятором ошибки должны содержать четкое указание на место проявления ошибки; добавлено более 50 тестов с неверными .ksy-файлами специально для тестирования этого сообщений об ошибках.-  Генерируемый код теперь содержит проверки на соответствие версии компилятора и runtime-библиотеки.-  Переработана система логирования поведения компилятора ("--verbose"): теперь можно гибко включать логирование по отдельным подсистемам.-  Новые возможности языка выражений: полноценная поддержка строк с двойными кавычками (с escape characters), type casting, методы для работы с массивами и различные преобразования типов.


Ввиду большого количества внутренних изменений, существенно изменен API runtime-библиотеки: код, сгенерированный ksc 0.7, будет работать только с runtime соответствующей версии. Благодаря введению механизма импорта, начаты работы по созданию библиотеки часто используемых структур данных и форматов. С версией 0.7 впервые эта библиотека поставляется в комплекте дистрибутива и на момент выпуска составляет 60 описаний.

URL: http://kaitai.io/news/2017-03-22.html
Новость: http://www.opennet.dev/opennews/art.shtml?num=46244

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Выпуск языка описания бинарных форматов Kaitai Struct 0.7"  +2 +/
Сообщение от Аноним (??) on 23-Мрт-17, 17:19 
Отличный проект, пользуемся, радуемся.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

9. "Выпуск языка описания бинарных форматов Kaitai Struct 0.7"  +2 +/
Сообщение от GreyCat (ok) on 23-Мрт-17, 20:22 
> Отличный проект, пользуемся, радуемся.

Спасибо! Для чего, если не секрет?

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

10. "Выпуск языка описания бинарных форматов Kaitai Struct 0.7"  +18 +/
Сообщение от Аноним (??) on 23-Мрт-17, 20:31 
> Спасибо! Для чего, если не секрет?

В основном для описания бинарных форматов.

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

7. "Выпуск языка описания бинарных форматов Kaitai Struct 0.7"  +3 +/
Сообщение от Аноним (??) on 23-Мрт-17, 19:17 
А оно умеет разбирать очень большие файлы, которые невозможно полностью загрузить в память?

А может разобрать файл с битым концом, не зафейлив всю операцию разбора, а зафейлив только битую часть?

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

8. "Выпуск языка описания бинарных форматов Kaitai Struct 0.7"  +1 +/
Сообщение от GreyCat (ok) on 23-Мрт-17, 20:21 
> А оно умеет разбирать очень большие файлы, которые невозможно полностью загрузить в память?

YMMV. Файловые системы разбираются без загрузки в память всех файлов - потому что там есть индекс и можно сделать lazy-доступ к объектам, когда программа обращается только к тем веткам, которые ей нужны (и, соответственно, грузит в память только их).

С другой стороны, если речь о разборе какого-нибудь дикого лога из одинаковых пакетов без индекса - если задать тупо массив пакетов с "repeat: eos" - то эту операцию нельзя выполнить, не зачитав все пакеты в память. Если нужна такая пакетная обработка - как вариант, можно описать структуру пакета, а командовать зачитыванием очередного пакета из потока уже из приложения.

> А может разобрать файл с битым концом, не зафейлив всю операцию разбора, а зафейлив только битую часть?

Да, в debug mode - может. Этим, собственно, все визуализаторы пользуются.

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

11. "Выпуск языка описания бинарных форматов Kaitai Struct 0.7"  +/
Сообщение от Аноним (??) on 23-Мрт-17, 20:49 

> С другой стороны, если речь о разборе какого-нибудь дикого лога из одинаковых
> пакетов без индекса - если задать тупо массив пакетов с "repeat:
> eos" - то эту операцию нельзя выполнить, не зачитав все пакеты
> в память. Если нужна такая пакетная обработка - как вариант, можно
> описать структуру пакета, а командовать зачитыванием очередного пакета из потока уже
> из приложения.

Спасибо за разъяснения, как раз интересовал парсинг потока с "repeat: eos". Ну, нельзя так нельзя. Не сильно страшно.

Всё равно проект очень полезный, спасибо, что разрабатываете его.

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

12. "Выпуск языка описания бинарных форматов Kaitai Struct 0.7"  +/
Сообщение от GreyCat (ok) on 23-Мрт-17, 20:55 
> Спасибо за разъяснения, как раз интересовал парсинг потока с "repeat: eos". Ну,
> нельзя так нельзя. Не сильно страшно.

Не так давно завели https://github.com/kaitai-io/kaitai_struct/issues/133 - это примерно про это. В некоторых случаях, понятно, что поток разбирать в lazy-режиме можно, например, если известно, что пакеты все одинаковой длины и можно тогда вычислить, куда сделать seek из индекса массива. Но, опять же, далеко не везде все пакеты одинаковой длины.

> Всё равно проект очень полезный, спасибо, что разрабатываете его.

Вам спасибо ;)

Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

13. "Выпуск языка описания бинарных форматов Kaitai Struct 0.7"  +/
Сообщение от KonstantinB (ok) on 23-Мрт-17, 21:56 
Ух ты, какая прелесть! Не знал о таком. Пригодится, вот прямо сейчас даже. Спасибо разработчикам.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

17. "Выпуск языка описания бинарных форматов Kaitai Struct 0.7"  –1 +/
Сообщение от Аноним (??) on 25-Мрт-17, 00:10 
Есть похожий Synalyze It (macOS) и hexinator (Wine/Windows)
Мы разбираем ими InnoDB .ibd файлы
Ответить | Правка | ^ к родителю #13 | Наверх | Cообщить модератору

23. "Выпуск языка описания бинарных форматов Kaitai Struct 0.7"  +/
Сообщение от KonstantinB (ok) on 25-Мрт-17, 14:59 
Не, мне немного для другого.  У меня типа протобуфов, только не протобуфы, и хочется это дело слать прямо веб-клиентам по вебсокетам.
Ответить | Правка | ^ к родителю #17 | Наверх | Cообщить модератору

19. "Выпуск языка описания бинарных форматов Kaitai Struct 0.7"  +/
Сообщение от Аноним (??) on 25-Мрт-17, 00:15 
https://hexinator.com/hexinator-linux/
Ответить | Правка | ^ к родителю #13 | Наверх | Cообщить модератору

14. "Выпуск языка описания бинарных форматов Kaitai Struct 0.7"  +/
Сообщение от wooz (??) on 24-Мрт-17, 15:56 
А слабо парсить C-ные хедеры и строить формат данных из них?
Как правило при разборе дампов памяти или файловой системы, структура данных известна, но находится с *.h соответствующего проекта.
имхо, парсинг *.h - это первое, чему надо учить подобную программу.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

16. "Выпуск языка описания бинарных форматов Kaitai Struct 0.7"  +/
Сообщение от Forth email(ok) on 24-Мрт-17, 20:39 
Кому как, мне лично видится функцией номер 1 генерация бинарников.
Парсинг это конечно здорово, но часто при написании парсеров бинарных протоколов нужен и обратный процесс.
Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

22. "Выпуск языка описания бинарных форматов Kaitai Struct 0.7"  +/
Сообщение от GreyCat (ok) on 25-Мрт-17, 14:24 
> Кому как, мне лично видится функцией номер 1 генерация бинарников.
> Парсинг это конечно здорово, но часто при написании парсеров бинарных протоколов нужен
> и обратный процесс.

Только вчера закоммитил кое-что: https://github.com/kaitai-io/kaitai_struct/issues/27#issueco...

Ответить | Правка | ^ к родителю #16 | Наверх | Cообщить модератору

24. "Выпуск языка описания бинарных форматов Kaitai Struct 0.7"  +/
Сообщение от Forth email(ok) on 25-Мрт-17, 18:01 
Супер. Крайне важная фича, без которой например в моих проектах просто никак.
Ответить | Правка | ^ к родителю #22 | Наверх | Cообщить модератору

21. "Выпуск языка описания бинарных форматов Kaitai Struct 0.7"  +/
Сообщение от GreyCat (ok) on 25-Мрт-17, 13:59 
> А слабо парсить C-ные хедеры и строить формат данных из них?

Набросал за 15 минут на двух-с-половиной регэкспах: https://gist.github.com/GreyCat/9dba530b0d2cb8ccec4e1d6e90a0...

Выдает полуфабрикат ksy, который можно доработать руками, попереименовать поля, дорасставить типы и т.д.

> Как правило при разборе дампов памяти или файловой системы, структура данных известна,
> но находится с *.h соответствующего проекта.
> имхо, парсинг *.h - это первое, чему надо учить подобную программу.

Конвертер .h -> .ksy вполне может быть отдельной программой, компилятор .ksy -> целевой язык тут вроде как не при чем. Да и, если честно, все по-разному. Даже если .h есть, то зачастую комментарии и документация по поводу полей лежит отдельно и все равно надо все это допиливать до ума.

Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

18. "Выпуск языка описания бинарных форматов Kaitai Struct 0.7"  +1 +/
Сообщение от Аноним (??) on 25-Мрт-17, 00:14 
Есть поддержка бинарных шаблонов от 010 Editor?
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

20. "Выпуск языка описания бинарных форматов Kaitai Struct 0.7"  +/
Сообщение от GreyCat (ok) on 25-Мрт-17, 00:30 
> Есть поддержка бинарных шаблонов от 010 Editor?

Нет, и вряд ли будет. 010 - почти чисто императивный язык, с циклами for, while и т.д. У нас - декларативный язык.

Ответить | Правка | ^ к родителю #18 | Наверх | Cообщить модератору

25. "Выпуск языка описания бинарных форматов Kaitai Struct 0.7"  +/
Сообщение от Alexey (??) on 26-Мрт-17, 17:18 
А где находится компонент, который позволяет "представить в виде наглядной диаграммы"?
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

26. "Выпуск языка описания бинарных форматов Kaitai Struct 0.7"  +/
Сообщение от GreyCat (ok) on 26-Мрт-17, 17:47 
В компиляторе. "ksc -t graphviz foo.ksy" и на выходе будет .dot-файл с диаграммой. Соответственно, чтобы получить картинку - что-то типа "dot -Tsvg foo.dot >foo.svg".
Ответить | Правка | ^ к родителю #25 | Наверх | Cообщить модератору

27. "Выпуск языка описания бинарных форматов Kaitai Struct 0.7"  +/
Сообщение от Alexey (??) on 26-Мрт-17, 20:37 
Спасибо
Ответить | Правка | ^ к родителю #26 | Наверх | Cообщить модератору

28. "Выпуск языка описания бинарных форматов Kaitai Struct 0.7"  +/
Сообщение от Alexey (??) on 27-Мрт-17, 08:42 
И еще вопрос - есть формат, где одним элементом является строка A (strz) и два числа B и C (u4), которые повторяются пока не встретится нулевой байт (u1 = 0x1), т.е. что-то вроде: ABCABCABC0...тут другие данные....
Вы не подскажете как такое можно выразить в терминах kaitai? Я пробовал циклы, но они вроде подразумевают, что структура считывается полностью.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

30. "Выпуск языка описания бинарных форматов Kaitai Struct 0.7"  +/
Сообщение от GreyCat (ok) on 27-Мрт-17, 10:52 
> И еще вопрос - есть формат, где одним элементом является строка A
> (strz) и два числа B и C (u4), которые повторяются пока
> не встретится нулевой байт (u1 = 0x1), т.е. что-то вроде: ABCABCABC0...тут
> другие данные....
> Вы не подскажете как такое можно выразить в терминах kaitai?

Стандартный подход - что-то типа:

    seq:
      - id: structures
        type: entries
        terminator: 0x1
        # такое объявление создает подпоток,
        # до байта-терминатор = 0x1, в котором
        # будет зачитываться тип entries
    types:
      entries:
        seq:
          - id: entries
            type: entry
            repeat: eos
            # зачитывается до конца потока,
            # т.е. до байта-терминатора
      entry:
        seq:
          - id: a
            type: strz
          - id: b
            type: u4
          - id: c
            type: u4

Разумеется, это означает, что если встречается "нулевой байт" (который на самом деле единичный) где-то внутри a-b-c - то все будет закончено на нем.

> Я пробовал циклы, но они вроде подразумевают, что структура считывается полностью.

Эм, а еще предполагается, что может быть не всегда ABCABC0, а может быть, например ABCA0?

Ответить | Правка | ^ к родителю #28 | Наверх | Cообщить модератору

31. "Выпуск языка описания бинарных форматов Kaitai Struct 0.7"  +/
Сообщение от Alexey (??) on 27-Мрт-17, 11:01 
"Эм, а еще предполагается, что может быть не всегда ABCABC0, а может быть, например ABCA0?"
Вот именно что ABCA0 быть не может, может быть только
* ABC0
* ABCABC0
* ABCABCABC0
и т.д.
Ответить | Правка | ^ к родителю #30 | Наверх | Cообщить модератору

32. "Выпуск языка описания бинарных форматов Kaitai Struct 0.7"  +/
Сообщение от GreyCat (ok) on 27-Мрт-17, 11:03 
> "Эм, а еще предполагается, что может быть не всегда ABCABC0, а может
> быть, например ABCA0?"
> Вот именно что ABCA0 быть не может, может быть только
> * ABC0
> * ABCABC0
> * ABCABCABC0
> и т.д.

Тогда вышеописанный подход с подпотоком в целом решает вопрос.

Ответить | Правка | ^ к родителю #31 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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