LINUX.ORG.RU

Kaitai Struct 0.8

 , , ,


4

1

После почти 8 месяцев разработки, состоялся очередной релиз Kaitai Struct 0.8 — языка описания и инструментария парсинга всевозможных бинарных форматов (например, сетевых пакетов, файлов с изображениями/аудио/видео, баз данных, архивов, контейнеров и т. д.). Как всегда, в комплекте:

  • компилятор, позволяющий из файла спецификации формата (.ksy) получить готовый исходник парсера на языках C++, C#, Java, JavaScript, Lua, Perl, PHP, Python, Ruby, а также диаграмму в формате GraphViz;
  • Web IDE для удобной разработки спецификаций с одновременным визуальным контролем;
  • библиотека форматов, насчитывающая в этом релизе уже 110 описаний

Список новшеств 0.8 довольно длинный, из основных достижений стоит отметить:

  • поддержку Lua (почти 100%), начальную поддержку Go (~15% тестов проходит);
  • поддержку переключения endianness по результатам вычислимого выражения (сильно упрощает поддержку форматов типа ELF, TIFF и т.п., которые встречаются в двух вариантах endianness)
  • параметрические типы — например, одной такой спецификацией BCD можно пользоваться самых разнообразных BCD, передавая при вызове типа параметрами число цифр, битность одной цифры и порядок их следования;
  • поддержка произвольных кастомных методов процессинга данных (расшифровка, декомпрессия и т.д.) путем подключения модуля на целевом языке программирования; в будущем планируется создание стандартных библиотек для распространенных алгоритмов сжатия, шифрования и обфускации данных;
  • возможность обращаться к индексу итерации в циклах — _index;
  • расширенные возможности документации enum'ов и кросс-ссылок;
  • у проекта появился логотип благодаря сотрудничеству с финским дизайнером Verneri Kontto

Релиз приурочен к пересечению проектом морального рубежа в 1000 stars на GitHub. Команда Kaitai благодарит всех пользующихся за доверие и поддержку и обещает, что дальше будет еще интереснее.

>>> Подробности

★★

Проверено: Shaman007 ()

Все забываю, можно ли работать с динамически меняющимися структурами

buddhist ★★★★★ ()

Спасибо, качнул.

Мне для Java надо.

Интересно, а http://lurkmore.to/Master_of_Orion «читить» можно?

Попробую поиграться и сделать moo2.ksy в formats/game

Bioreactor ★★★★★ ()

Генерацию апи для редактирования данных в этом релизе не добавили?

ncrmnt ★★★★★ ()

Логотип отталкивающий, порезаться можно. И корректора вам надо англоговорящего.

anonymous ()

Зачем это нужно, когда есть protobuf?

anonymous ()

Нужно. Надо будет как-нибудь потыкать

sehellion ★★★★★ ()

Спасибо! Надеюсь wireshark перейдет на это

xor2003 ()
Ответ на: комментарий от anonymous

protobuf - вещь хорошая и полезная.

Для задач, требующих сериализации и передачи данных.

Поскольку я использую GWT/GXT, то - https://github.com/gwtproject/gwt/issues/2655

А если «читить» игру, то тогда Kaitai.

Bioreactor ★★★★★ ()

Парсер для пыха, куда же применить...

Napilnik ★★★★★ ()
Ответ на: комментарий от ncrmnt

Генерацию апи для редактирования данных в этом релизе не добавили?

В релизе — нет. Есть PoC-бранч, но пока там работает только для java.

GreyCat ★★ ()

поддержка произвольных кастомных методов процессинга данных (расшифровка, декомпрессия и т.д.) путем подключения модуля на целевом языке программирования;

О, я под одной из новостей жаловался, что этого не хватает. Пришло время попробовать инструмент в работе еще раз.

anonymous ()
Ответ на: комментарий от anonymous

Зачем это нужно, когда есть protobuf?

Он совсем про другое. Protobuf для того, чтобы организовать _свои_ данные в оптимальный компактный формат, чаще всего для передачи по сети. А сабж нужен, когда формат данных на низком уровне уже определён извне, и его надо описать, а то и предварительно исследовать, а потом уже сгенерировать читающий/пишущий код. (И уже неважно, оптимальный формат или нет, главное, чтобы был корректно описан.) Здесь уже приводили пример с потрошением игр, но есть и другие применения.

Надеюсь, понятно объяснил, я в своё время тоже сначала не мог понять разницу...

hobbit ★★★★★ ()
Последнее исправление: hobbit (всего исправлений: 3)

От активного пользователя

Первая более-менее развитая вещь.
Описываю на нем структуры всяких защищенных файлов.
Использовал C++/ruby/python/graphviz парсеры.
Главная цель - быстро описать любой странный формат файлов и сгенерировать к нему врапперы для ЯП. Сам файл структуры при этом является документацией.

Преимущества:
* простой декларативный синтаксис (учится прямо в процессе, масса примеров)
* довольно большой список языков для библиотек
* простые и рабочие инструменты - компилятор/просмотрщик.
* раскодирование потоков (у меня пока только zlib и xor)

Из недостатков можно отметить:
* все еще не самую простую установку (компилятор отдельно, библиотеки поддержки отдельно, просмотрщик отдельно)
* не поддерживает запись (только чтение)
* плохо поддерживает текстовые структуры
* WebIDE вечно дико тормозит, приходится пользоваться внутренним просмотрщиком ;)

Желаю им всяческой удачи и стать де-факто в описании форматов.

enwony ()
Ответ на: От активного пользователя от enwony

Спасибо за отзыв!

* все еще не самую простую установку (компилятор отдельно, библиотеки поддержки отдельно, просмотрщик отдельно)

Кстати, да. Инфраструктурный вопрос назрел и стоит весьма остро: надеюсь, в следующем релизе будем как раз его решать. А то подготовка релиза и сам релиз занимающие сами по себе несколько недель — это кошмар (и то еще вылезают косяки).

Если какие-нибудь из ваших проектов есть в паблике — то подскажите, можем их добавить в список использующих?

GreyCat ★★ ()

Готовых GPS(GNSS) протоколов BINR и NMEA еще нет?

Xintrea ★★★★★ ()
Ответ на: комментарий от xor2003

Спасибо! Надеюсь wireshark перейдет на это

С людьми из wireshark разговор был, там куча legacy и своей специфики. В частности, они прям сильно против привлечения сторонних инструментов на чем-либо, кроме C или, в самом крайнем случае, C++. Если бы хотя бы ksc кто-либо принял в major-дистрибутивы типа Debian или RH — возможно, это был бы другой разговор.

GreyCat ★★ ()

WebIde zlib не научилась парсить?
chunk based decoding не планируете? А то из-за этой фичи пришлось руками все переписать.

Вообще конечно накидать PoC парсера очень удобная вещь.

michey ★★ ()
Последнее исправление: michey (всего исправлений: 2)

Пока формата Netflow v5, v9, IPFIX не завезли

zyxar ()
Ответ на: комментарий от GreyCat

Да это я только новость на сайте прочитал. Патчей не предложу, сам неграмотный, но есть явно кривое (и сразу догадываешься, какой язык родной):

npm package, which now a build dependency of a web IDE

to be defined to how to handle string encodings

classes are now subclasses of KaitaiStream and were renamed

anonymous ()

компилятор, позволяющий из файла спецификации формата (.ksy) получить готовый исходник парсера на языках

Кстати, а сам компилятор на чём написан?

hobbit ★★★★★ ()

И ещё вдогонку. Я смотрю, в коллекции форматов есть dbf. А есть ли надежда на появление формата Paradox от Borland? Или по ней в принципе нет информации, позволяющей такое описание создать?

Понимаю, что вопрос не совсем по адресу - но вдруг кто-то из ваших контрибьюторов эту проблему хотя бы исследовал...

hobbit ★★★★★ ()
Ответ на: комментарий от anonymous

Спасибо! Кстати, что самое интересное, конкретно эти места (кроме пассажа про C++, который писал я) писал как раз человек, не имеющий никакого отношения к русскому :)

GreyCat ★★ ()
Ответ на: комментарий от hobbit

А есть ли надежда на появление формата Paradox от Borland? Или по ней в принципе нет информации, позволяющей такое описание создать?

Надежда всегда есть. Вот тут вроде бы что-то находится: https://stackoverflow.com/questions/26671089/paradox-database-file

Один инициативный товарищ вот здесь поддерживает список того, над чем были начаты работы, Paradox там пока нет. Можете попробовать сами разобрать, по идее это не очень сложно должно быть.

GreyCat ★★ ()
Ответ на: комментарий от anonymous

Автор Construct, кстати, теперь к нам присоединился ;) И уже успел сломать Python runtime прям перед выпуском, я вчера вон судорожно чинил ;)

GreyCat ★★ ()

Просто великолепный проект!

Недавно использовал.

Есть правда пара хотелок и печалей.

1. WebIDE регулярно скачивает ksy какой-то старой версии, а не той, что сейчас в редакторе.

2. Очень бы хотелось возможность связывать несколько файлов. Регулярная ситуация, в одном файле адреса структур, а в другом сами структуры.

3. Было бы просто чумой, если бы выделенный кусок можно было быстро поискать в других файлах (часто ищешь какой-нибудь id связки), или интерпретировать кусок как offset и показать что по нему находится в рабочих файлах (в ida похожее есть).

Svoloch ★★★ ()
Последнее исправление: Svoloch (всего исправлений: 2)

Хорошо сделали, годно, спасибо!

anonymous ()
Ответ на: комментарий от GreyCat

Пользователи

Я выполняю работу на заказчиков, и, к сожалению, даже речи обычно не идет о публикации формата. Однако, в случае старых игр я подсказываю/спрашиваю насчет публикации - пока тоже отказывали.

enwony ()

Чуть глаза не вывихнул, пока рассматривал логотип. Понятно, что хотелось сделать, но «складка» всё портит. Убрать её и уже будет лучше. Или заставить этого вашего дизайнера посмотреть и поскладывать реальное оригами, если идею жалко выбрасывать.

anonymous ()

Стандартный вопрос: почему среди языков все еще нет чистого С? Ответ «потому что в стандартной библиотеке нет нужных типов» неинтересен, уже был.

anonymous ()
Ответ на: комментарий от anonymous

Стандартный ответ нынче заготовлен в https://github.com/kaitai-io/kaitai_struct/issues/263

Когда-нибудь, наверное, доберемся — хотя, по большому счету, это не очень в приоритете, т.к. если кому было правда нужно, он бы уже занялся и сделал. Реалистично ожидать это где-то после того, как заработает в более-менее полную силу golang target, т.к. C очень на него похож.

GreyCat ★★ ()

И что он может получить из jpeg/png файла, простите за нескромность?

fehhner ★★★ ()
Ответ на: комментарий от fehhner

Примерно то же, что и из любого другого формата — дерево объектов, которые там хранятся — секции, заголовки, тела payload'ов и т.д.

GreyCat ★★ ()

Web IDE для удобной разработки спецификаций с одновременным визуальным контролем;

Где получить её исходный код? Нашёл. Представляю как оно будет тормозить на локалхосте, джаваскрипт этот ваш.

dnb ()
Последнее исправление: dnb (всего исправлений: 1)
Ответ на: комментарий от dnb

В смысле - на локалхосте? Чем это будет отличаться от того, что отдают на ide.kaitai.io?

GreyCat ★★ ()
Ответ на: комментарий от GreyCat

Чет аргументы из разряда «мы ниасилили». Этот инструмент ГЛАВНЫМ образом был бы полезен Си разработчикам, так как это им приходится работать с сырыми данными в 90% случаев. А тут отмазы уровня: «ну в си надо будет на один байт больше для строк выделять, мы так не умеем», «ну в си нет стандартизированной структуры-массива» (что мешает свою объявить), «ну в си нет выполняемых рантайм-экспрешнс» (что мешает подключить такую либу или написать самому? Я такую написал за 3 дня, когда было нужно), «ну в си нет эксепшнов, а сделать `errcode = 5; goto error;' мы ниасилили», «ну мы короч посмотрели, кроме glib под си ничего не существует, поэтому забили».

PPP328 ★★ ()
Ответ на: комментарий от PPP328

Все очень просто: мы поговорили с каким-то количеством C-разработчиков, которые готовы были интегрироваться, собрали какое-то количество хотелок и оказалось, что если мы сделаем по хотелкам какого-то одного проекта, всем другим это будет бесполезно или почти бесполезно.

Тащить еще одну уникальную поделку библиотеку со своей богатой внутренней жизнью, которую надо еще изучать и работать с ней, не хотят почти все.

Ну и, да, это не то, что мы отказываемся от идеи или видим какие-то тотальные блокеры — просто приоритет у этого сейчас весьма низкий.

GreyCat ★★ ()
Ответ на: комментарий от anonymous

Стандартный вопрос: почему среди языков все еще нет чистого С?

Потому что есть ragel

anonymous ()

И на хрена этот костыль ?! Если известен формат файла, то написать код для работы с ним не такая уж и сложная задача

anonymous ()
Ответ на: комментарий от frob

А если не известен формат файла, то и говорить не о чем, данный костыль тогда тем более бесполезен. Да с ним дольше разбираться, чем просто взять и написать на своем привычном языке

anonymous ()

А почему на логотипе 力, а не 解?

anonymous ()
Ответ на: комментарий от anonymous

И много ты написал на своём привычном языке?

frob ★★★★★ ()

Допустим есть такой файл http://rgho.st/76nZK5HfS Формат неизвестен (закрытый, проприетарный). Этот софт может помочь в написании библиотеки для работы с этим форматом?

dnb ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.