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 ()
Последнее исправление: Shaman007 (всего исправлений: 1)

Ответ на: комментарий от Svoloch

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

У меня как раз так и сделано в одном проекте: оффсеты в одном файле, а строки в другом

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

Дерево, говорите? А вот распаковку хаффмана или сразу дефлейта, за которую тут говорили в прошлых сериях, когда можно? И шоб с кортинками

anonymous
()

Как оно, юзал кто-нить?

ЗЫ Писал свой парсер метаданных, да забросил. Перестало быть актуальным.

Deleted
()
Последнее исправление: rht (всего исправлений: 1)

Пользовался, понравилось

Отличный инструмент, желаю успеха и развития! Конечно не все там было что мне надо (не хватало динамически вычитывать кусок архива, и сразу понимать что будет лежать дальше, в зависимости от текущего состояния и рекурсивно парсисть такой же кусок и так дальше...), но там где можно применить где вся структура задана статически заранее все просто шикарно.

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

Вах, спасибо! Радует, что вы хотя бы серьезно рассматриваете данный вариант. На мой взгляд, большая часть проблем, перечисленных тобой, из разряда «заморочки по мелочам» и «глаза боятся, а руки делают» - главное сделать один из приемлемых вариантов, а потом уже можно будет философствовать «если бы да кабы» и выдвигать аргументы «не нравится - сделайте лучше».

anonymous
()

Я хочу, чтобы вы написали хекс-редактор, суть токова: можно открывать файлы, диски и память разных процессов. И если открывать память, то можно видеть изменения памяти в реальном времени и все патчить на лету. Сохраняться можно. А если посмотреть в регистр IP, то можно с ентава места дизассемблер делать. Дизассемблир должен паддержывать архетектуры х86, z80 и 6502. И если мы дизассемблим, то чтоб нопить можна было прям в етом же окошке. И снова сохраняться. А если мы аткрываем EXE PE-файл, то шоб сразу секции что где видеть. Можно делать инъекции и атрывать цыфравые подписи. Можно сохраняться. А если не дает сохраняться, то шоб песать прямо в сектара диска. А если мы парсим чой-та большое, такое как НТФС, то шоб работало на моем кампутере с 256 метрами аперативы и не тармазило. И шоб была эвристика, каторая бы показала где в файле индексы, где код, где картинки и звуки, пусть делает быстра преобразование фурье и показывает спектры ещо. Можно запускать атладчик и логгить обращения к памяти и отмапленнаму файлу. И если там картинки, то смотреть в RGB/CMYK или CGA/EGA-палитрах, а вот если звуки, то через бластер играть PCM/ADPCM и прочее от 4 килогерц моно до 48 гигагерц стерео с размером семплав от 2 бит. Сохраняться можно.

Я джва года пишу такой редактор, но пока не осилил нормально рендерить шрифты. Пока прикрутил шрифты от Амиги, но они не очень красивые, зато редактор работал быстро. Надеюсь вы зделаете все и я смогу пройти апасного Дейва 3, а то ко мне прилетают ножики и миня убивают :(((((((

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

главное сделать один из приемлемых вариантов, а потом уже можно будет философствовать «если бы да кабы» и выдвигать аргументы «не нравится - сделайте лучше».

Во-первых, вопрос приоритетов. Сейчас, скажем, есть действительно серьезная проблема с тем, что синтаксис генерируемого C++ у нас допотопный и во многом из-за этого генерируемый код может иметь memory leaks на exception'ах — https://github.com/kaitai-io/kaitai_struct/issues/214. И, насколько мне кажется, решать это куда актуальнее, чем делать поддержку нового языка, востребованную сравнительно немногочисленной аудиторией.

Во-вторых, мы все-таки двигаемся большей частью на ощупь. Мы не то, чтобы дерем идеи с какого-то готового проекта, а на каждом шагу изобретаем что-то. Go в этом плане мне очень понравился тем, что показал какой-то ориентир, каким должен быть «нормальный C» в наше время и в целом показал, что к такому вот можно стремиться и это таки будет кем-то востребовано. Будем надеяться, что доделав его (а даже там проблем еще вагон), можно будет говорить о том, чтобы примерно все то же самое принести в C и заняться уже проблемами, специфичными для C (в первую очередь, memory management).

GreyCat ★★
() автор топика
Ответ на: Пользовался, понравилось от leanid-chaika

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

Можно чуть подробнее, чего хочется сделать? На первый взгляд не выглядит таким уж невозможным — речь о том, чтобы просто парсить с какими-то условиями/свичами?

GreyCat ★★
() автор топика

А потоковую работу добавили? те чтобы сетевые пакеты обрабатывать если они кусками.

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

Если речь просто про то, как потоково парсить гигантские дампы, не зачитывая их все в память, то сейчас это делается как-то так, т.е. с организацией цикла в приложении.

Если вы имели в виду что-то другое — уточните, пожалуйста, что именно?

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

синтаксис генерируемого C++ у нас допотопный

А вы на какой стандарт ориентируетесь? Хотя бы C++11, или чем старее тем лучше?

И, кстати, немного странная формулировка на сайте - «C++/STL». Хватило бы просто C++, у других языков вы же не выделяете стандартную библиотеку.

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

Мы пока именно на «чем старее, тем лучше» ориентировались, т.к. есть люди, которым принципиально, чтобы это работало на всяких embedded компиляторах образца конца 1990ых.

Ну и формулировка, собственно, не такая уж и странная. Неоднократно уже, например, высказывались пожелания сделать C++/Qt, где фактически ничего из STL бы не использовалось (были бы QString, QVector и т.д.). Есть еще в теории MFC, где тоже свои CString и CArray. Кто-то из игроделов мне рассказывал, что там в индустрии существует целый пласт таких узкоспециализированных библиотек для игростроения, где «всё своё».

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

Тогда понятно. Но только вы же всё равно всех не удовлетворите, тут бы сделать расширяемость, чтоб желающий как можно легче получил на выходе свои личные xstring. Например как в компиляторах, где вы даете фронтенд, а у кого специфичная библиотека - пишет под нее простой бэкенд, что-то типа маппинга примитивных действий на свою библиотеку.

Но это так, мысли вслух.

anonymous
()

Кстати было бы неплохо написать детектор типа файла пользуясь их базой. Задача интересная.

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

Спасибо за ссылку.

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

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

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

Еще Clarion тоже в свое время интересовал. Я написал читалку DBF. На сколько я помню по скорости чтения меня еще никто не обгонял. Код ужасен. Но я на основе описания и хедера генерю struct https://sourceforge.net/projects/demdbf/

Была версия с итераторами. Та вообще реактивная была.

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

А вот распаковку хаффмана или сразу дефлейта,

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

за которую тут говорили

Украина?

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

В смысле «in memory»? И что за RTTY? RTTI, в смысле? Он упомянут в #340, но я опять же в упор не пойму, зачем он там упомянут. Могу предположить, что человек имел в виду что-нибудь типа «итерироваться по всем классам, которые унаследованы от kstruct» или что-то типа того? Чем тут RTTI поможет, правда, мне все равно не очень ясно.

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

Сорян читал по диагонали. Меня смутило «Obviously it will require RTTI in C++.»

Тут я просто подумал, что Katai может и из памяти дергать данные.

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

В смысле - из памяти дергать? Читать стрим на основе байт в памяти в C++ можно, причем в целом штатными средствами — в sstream оборачиваем, и вперед :)

GreyCat ★★
() автор топика

А есть какой-то чатик, где обитает серый кот, чтобы ему можно было быстро задавать много глупых вопросов?

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