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 ()

Хороший полезный проект, желаю всяческих успехов!

leanid-chaika
()

Годная штука! Два вопроса: сборка на NWjs или Electron есть? И еще по bintray.com - это фришный акк позволяет репы там держать?

Linfan ★★★★★
()

языка описания и инструментария парсинга всевозможных бинарных форматов

Который ничем не отличается от «парсинга» всевозможных небинарных форматов.

бинарных форматов

Порядок бит в байте оно умеет или как обычно msb first only?

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

Который ничем не отличается от «парсинга» всевозможных небинарных форматов.

Любишь побайтно парсить различные xml-образные и json файлы? ))

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

А ты их как-то по другому «парсишь»? Приведи определение «парсинга», которое ты используешь.

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

А разве возможно по другому ? Если меня не подводит память - любой символ или слово - это тоже просто набор байтов.

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

Самостоятельно байтики перекладывать для упомянутых форматов, уже лет 15-20 как моветон. Ежу понятно, что зачитка файла на нижнем уровне одинакова, но готовые библиотеки, которые часто уже часть stdlib в разных ЯП, какбэ никто не отменял. Собственно, в этом и

отличается от «парсинга» всевозможных небинарных форматов

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

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

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

Всё-таки отличается

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

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

Любой формат может иметь или не иметь жёсткой структуры - это зависит исключительно от требований к обработчикам этих форматов и ни от чего более(нужно быстро - делаем жёстче, нужно удобнее - делаем мягче).

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

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

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

Самостоятельно байтики перекладывать для упомянутых форматов, уже лет 15-20 как моветон

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

Собственно, в этом

И сглаживается это различие элементарно - либой, умеющей bit и byte order + byte breaked field. Сабж опять не нужен.

Ежу понятно

Судя по всему, до ежа ты ещё не дорос.

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

вау, какой прокачанный анон! Научился файлы открывать на чтение и как его поперло-то ))) Ну прям «гигант мысли, отец русского парсинга и особа, приближенная к Кернигану и Ричи» (с) почти

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

Лужа?

К тому же, разбор любого формата никак не зависит от того, открыл ты файл «на чтение» или нет. Там вообще никакого файла нет.

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

А вот и школоскобочки попёрли.

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

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

Устроил школосрач с мимошкололо, загадил тему. Пять звёзд. Норм, чо.

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

Абсолютно неважно, где ты пытаешься выдать себя за специалиста и садишься в лужу на элементарных вопросах - хоть на ЛОРе, хоть в «факультетском чатике».

Я понимаю, что тупить и отнекиваться с нотой «это всё прикол/троллинг» здесь сейчас модно(хотя на самом деле нет - это уже популярно, а не модно). Но это общая тенденция, ЛОРом дело не ограничивается. Сейчас (почти) на каждой свободной площадке имеем толпы псевдоинтеллектуалов, которым «забавно», когда им указывают на их низкий уровень знаний и которых «веселит» любой абсурд и трэш. Молодцы, чо.

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

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

Прочитайте https://en.wikipedia.org/wiki/Compound_File_Binary_Format, или https://ru.wikipedia.org/wiki/WBXML например.

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

Мог бы и не вестись на подначки глупых взрослых дяденек.

Да, кстати, забыл ещё одну особенность нынешних военов. Принцип «игнорируй всё неудобное для себя» aka «не нравиться - проходи мимо», это же даёт +30 к уму в глазах окружающих(нет). Разумеется, такой подход тоже не работает, ибо потом получаем вопли тех же военов про «не торт», «злобные корпорации/власти» и т. д.

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

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

Linfan ★★★★★
()

Python через библиотеку Construct

Блиин. Ну нормально же начинали. Зачем тормозной Construct который через задницу повторяет функциональность KS?

ei-grad ★★★★★
()

Уберите это 4.2 про Construct, оно там только в README упоминается как альтернатива @GreyCat @Shaman007

ei-grad ★★★★★
()
Последнее исправление: ei-grad (всего исправлений: 1)
Ответ на: комментарий от Linfan

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

Тогда зачем ты мне пишешь? Впрочем, вопрос риторический. Ты уже обделался сначала с «парсингом», потом с «отличается» и «файлом на чтение», а теперь ещё и с этим:

Ты приперся в тему набросить на вентилятор и выглядишь весьма глупо

Притом мой изначальный вопрос ты проигнорировал. Хотя это типично для балаболов. Побежал оправдываться.

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

Ага, «кто способен понять - тот поймёт» + «сперва добейся». Фееричный слив.

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

Ты уже обделался сначала с «парсингом», потом с «отличается» и «файлом на чтение»

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

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

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

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

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

Linfan ★★★★★
()

замонтировать файл

кончая разбором

поправьте

autonomous ★★★★★
()
Последнее исправление: autonomous (всего исправлений: 1)
Ответ на: комментарий от ei-grad

Btw, причем тут scala в тегах?

Язык, на котором написана эта штука (сам генератор кода по описанию).

xaizek ★★★★★
()

и еще 78 форматов находятся в процессе pull request review

Некоторые там больше 2 лет уже находятся. Это PR хренового качества или у проекта не хватает людей на это самое review?

zabbal ★★★★★
()

На раст забили?

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

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

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

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

В форматах, с которыми приходилось сталкиваться, endianness задавалась на весь файл на уровне спецификации. Есть ли примеры смешанного варианта? Ну не синтетические, а из реальной практики.

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

Конечно, я же не просто так спрашиваю :) В SEGY формат в последней ревизии добавили возможность писать le, а определять endianness предлагается по определённому слову.

andalevor ★★
()

Годная штука если нужно что то реверсить. Собственно для этого оно и создавалось.

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

Тысячи их, когда заголовки в LE, а содержимое в BE или наоборот. Если в Katai задается только один формат на весь поток - это треш угар и никому не нужно.

PPP328 ★★★★★
()

А для текстовых форматов такая штука есть? Знаю только peg.js

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