LINUX.ORG.RU

Kaitai Struct 0.9

 , , ,


3

5

Cовсем недавно вышла очередная версия Kaitai Struct 0.9 — языка описания и инструментария парсинга всевозможных бинарных форматов (например, сетевых пакетов, файлов с изображениями/аудио/видео, баз данных, архивов, контейнеров и т. д.). Несмотря на несерьезно выглядящий номер версии 0.9 — это крупный релиз, включающий в себя наработки за последние 2.5 года. За это время язык вырос до целого семейства проектов:

Язык признан GitHub и используется сейчас в более, чем 400 free / open source проектах для парсинга всевозможных экзотических форматов данных, начиная от реверс-инжиниринга файлов данных проприетарных игр, кончая разбором протоколов связи спутников.

Из основных новшеств языка 0.9 стоит выделить:

  • поддержка новых целевых языков (Python через библиотеку Construct, Nim, генерацию документации в HTML)
  • полноценную поддержку современных C++ (smart pointers, отсутствие необходимости вручную управлять памятью, исправление всех известных вариантов утечек памяти)
  • поддержку адресации вложенных типов через синтаксис вида foo::bar::baz
  • поддержку валидации прочитанных данных по описанным условиям (valid)
  • вычисление размеров статических структур данных в байтах и битах (операторы sizeof и bitsizeof)
  • формальное описание языка в виде JSON-схемы, из которой теперь генерируется документация

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

★★

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

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

Мимо.

Это плейсервер для невиртуальных кинотеатров, которые с билетами, креслами и попкорном. Показывать честно лицензированное у прокатчиков кино, с шифрованием потоков и водяными знаками.

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

Если тебе хостинг картинок рядом со скриншотом показывает порнуху — проблема, скорее всего, на твоей стороне канала :)

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

А можно нормальных пятизвездочных регистрантов, а не это @Linfan позорище?

Нормальных выгнала кровавая (теперь во всех смыслах) модерастия.

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

Там можно было запихнуть их в if. Вот только не помню, можно ли пол файла в одной кодировке, пол в другой. Вроде бы нет.

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

Возможно, в 0.10 мы попробуем сделать билд на Scala.Native.

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

Два вопроса: сборка на NWjs или Electron есть?

Я так понимаю, вопрос про Web IDE? Пока нет. Если есть желание сделать — welcome :)

И еще по bintray.com - это фришный акк позволяет репы там держать?

Да. В целом сейчас держать репозитарии вообще не большая проблема — их чуть ли не github умеет содержать.

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

Просто в документации я увидел только 2 варианта be и le. А что если в зависимости от слова по определйнному выносу у меня файл может или be, или le?

У нас это называется «calculated default endianness» и оно поддерживается. Ровно так b работает, например, парсинг ELF, который на скриншоте.

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

Прона не увидел.

А скриншоты? Скриншоты увидел?

LamerOk ★★★★★
()

Это как-то связано с ASN.1?

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

мне не нужно «выдать себя за специалиста»

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

is a powerful and mature application that makes users more productive and provides them professional and free solution even for exotic *nix OSes.

продактив, профешнал. экзотические юниксы в виде арча и манжары. ну и, конечно же, убийца профешнал фотошопа и кореля.

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

О! Интересно. Всем, кто привел примеры

т.е. гуру парсинга даже про форматы нихера не знает, но вскукарекнуть очень хочется?

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

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

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

та то понятно, что вас как за баней ) Но уходить от темы сабжа на обсуждение другого проекта - моветон. Будет новость, там и оттягивайтесь. А тут другая тематика.

Linfan ★★★★★
()

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

 

…удобной разработки…
…с одновременным визуальным контролем…

Нет. grumpy_cat.jpg

 

плагин для Binary Ninja;

Плагин для Binary Ninja представляет собой банальные парсеры, сгенерированные Kaitai и наваленные в одну папку. Он не позволяет создавать новый .ksy на лету, а только лишь подсвечивает фрагменты дампа по шаблону.

Очевидно, при изменении форматов в ветке Kaitai, автор плагина сам должен перегенерить парсеры, положить сгенеренные .py–файлы в свой проект с плагином на github, и только тогда эти изменения будут доступны пользователям плагина.

Veles

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

Hobbits

То же самое — парсеры генерируются из .ksy в момент сборки и представлены в готовом релизе в виде скомпилированной бинарной библиотеки. Но! Уже есть возможность загрузить внешний .ksy …при условии указания пути к ksc . То есть, чтобы работать со своими .ksy необходим внешний компилятор, со всеми его зависимостями. Увы, даже с такой оговоркой Hobbits не может заменить WebIDE/ksv, ибо работа с Kaitai, в плане эргономики, там реализована крайне отвратно никак. Нет перехода по двойному щелчку, нет подсветки, нет распарсенного содержимого полей, etc, etc…

плагин для Hiew

Также является статичным набором парсеров. Но это пункт списка, поразивший меня более всего. Итак, Hiew — это классический «swiss army knife» для ковыряния бинарников под оффтопик. Минималистичный, компактный, со спартанским интерфейсом, но широкими возможностями. Плагинные расширения там, понятно, в виде библиотек с сишным интерфейсом. И как же автор (широко известный в узких кругах Tavis Ormandy) выкрутился, чтобы запихнуть Kaitai в сишную библиотеку? …барабанная дробь… Ему пришлось притащить туда яваскриптовый движок (!!!). То есть: Hiew, который грузит плагин, в котором вкомпилен duktape, на котором исполняется KaitaiStream.js и сгенерированные яваскриптовые парсеры… Занавес.

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

Комментарии в массе своей справедливы и, вероятно, нужно будет как-то так их и разграничивать: часть инструментов не позволяет вообще подгружать кастомные ksy (Veles, Kiewtai), часть инструментов позволяет делать это с определенными сложностями (Binja), часть — позволяет свободно (Hobbits, ksv, Java GUI, плагин для vscode, WebIDE).

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

Это будет так абсолютно для всех визуализаторов, претендующих на работу с внешними .ksy. Максимум, что можно сделать — bundle’ить компилятор внутри визуализатора (что делают, скажем, Java GUI, vscode-плагин и WebIDE), либо осуществить развязку

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

Бывают производства где необходима диверсификация и одним флексом не обойтись, приходится искать всякие альтернативы.

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

Мммм... что же это у вас за форматы такие?

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

Бывают производства где необходима диверсификация и одним флексом не обойтись …

Так flex и не предназначен для работы с бинарными форматами.
О чем вы?

Владимир

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

Парсинг - интересная и АКТУАЛЬНАЯ тема.
Почему?
ИМХО ни кто еще в open source не выложил исходники парсера, который бы работал быстро, умел AST в качестве результата предоставлять, иметь хороший API, внятную документацию, … bison, byacc, flex, … как-бы «умеют» многое, но отказался от них.
Проще докторскую диссертацию на тему «Кому на Руси жить хорошо» проще написать, чем с их использованием реализовать скажем парсинг struct /у меня такой самопал имеется/.
Когда решил добавить в struct возможность использования «свойств» для полей и объектов, то написал свой парсинг.
Он не универсальный, зато скорость «полета» как если сравнить «кукурузник» и МИГ-35.

www.antlr.org правда есть, но …

PS: Огорчю тех кто считает, что «до нас все украдено».

Вы не правы

Владимир

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

PS: Огорчю тех кто считает, что «до нас все украдено».

Чу … «огорчу».

Владимир

anonymous
()

Неплохая штука

Отличная штука, использовал уже несколько раз в реальных проектах. Для меня самое главное - позволяет разделить хорошо процесс анализа структур данных (визуальный редактор, написание правил формата) и управления ими позже (берем какой-нибудь python или MSVC и довольно быстро пишем конвертор или экстрактор данных).

По гибкости пара моментов была с чем я сталкивался, но ничего критичного не помню.

PS: Кстати, документация отличная.

anonymous
()
Ответ на: Неплохая штука от anonymous

А документация у них есть вообще? Может я не нашёл просто. Есть какой-то обширный туториал с кучей TODO прямо в тексте. Там почти всё есть, конечно, но как-то несерьёзно.

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