|
2.9, GreyCat (ok), 20:22, 23/03/2017 [^] [^^] [^^^] [ответить]
| +2 +/– |
> Отличный проект, пользуемся, радуемся.
Спасибо! Для чего, если не секрет?
| |
|
3.10, Аноним (-), 20:31, 23/03/2017 [^] [^^] [^^^] [ответить]
| +18 +/– |
> Спасибо! Для чего, если не секрет?
В основном для описания бинарных форматов.
| |
|
|
1.7, Аноним (-), 19:17, 23/03/2017 [ответить] [﹢﹢﹢] [ · · · ]
| +3 +/– |
А оно умеет разбирать очень большие файлы, которые невозможно полностью загрузить в память?
А может разобрать файл с битым концом, не зафейлив всю операцию разбора, а зафейлив только битую часть?
| |
|
2.8, GreyCat (ok), 20:21, 23/03/2017 [^] [^^] [^^^] [ответить]
| +1 +/– |
> А оно умеет разбирать очень большие файлы, которые невозможно полностью загрузить в память?
YMMV. Файловые системы разбираются без загрузки в память всех файлов - потому что там есть индекс и можно сделать lazy-доступ к объектам, когда программа обращается только к тем веткам, которые ей нужны (и, соответственно, грузит в память только их).
С другой стороны, если речь о разборе какого-нибудь дикого лога из одинаковых пакетов без индекса - если задать тупо массив пакетов с "repeat: eos" - то эту операцию нельзя выполнить, не зачитав все пакеты в память. Если нужна такая пакетная обработка - как вариант, можно описать структуру пакета, а командовать зачитыванием очередного пакета из потока уже из приложения.
> А может разобрать файл с битым концом, не зафейлив всю операцию разбора, а зафейлив только битую часть?
Да, в debug mode - может. Этим, собственно, все визуализаторы пользуются.
| |
|
3.11, Аноним (-), 20:49, 23/03/2017 [^] [^^] [^^^] [ответить]
| +/– |
> С другой стороны, если речь о разборе какого-нибудь дикого лога из одинаковых
> пакетов без индекса - если задать тупо массив пакетов с "repeat:
> eos" - то эту операцию нельзя выполнить, не зачитав все пакеты
> в память. Если нужна такая пакетная обработка - как вариант, можно
> описать структуру пакета, а командовать зачитыванием очередного пакета из потока уже
> из приложения.
Спасибо за разъяснения, как раз интересовал парсинг потока с "repeat: eos". Ну, нельзя так нельзя. Не сильно страшно.
Всё равно проект очень полезный, спасибо, что разрабатываете его.
| |
|
4.12, GreyCat (ok), 20:55, 23/03/2017 [^] [^^] [^^^] [ответить]
| +/– |
> Спасибо за разъяснения, как раз интересовал парсинг потока с "repeat: eos". Ну,
> нельзя так нельзя. Не сильно страшно.
Не так давно завели https://github.com/kaitai-io/kaitai_struct/issues/133 - это примерно про это. В некоторых случаях, понятно, что поток разбирать в lazy-режиме можно, например, если известно, что пакеты все одинаковой длины и можно тогда вычислить, куда сделать seek из индекса массива. Но, опять же, далеко не везде все пакеты одинаковой длины.
> Всё равно проект очень полезный, спасибо, что разрабатываете его.
Вам спасибо ;)
| |
|
|
|
1.13, KonstantinB (ok), 21:56, 23/03/2017 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Ух ты, какая прелесть! Не знал о таком. Пригодится, вот прямо сейчас даже. Спасибо разработчикам.
| |
|
2.17, Аноним (-), 00:10, 25/03/2017 [^] [^^] [^^^] [ответить]
| –1 +/– |
Есть похожий Synalyze It (macOS) и hexinator (Wine/Windows)
Мы разбираем ими InnoDB .ibd файлы
| |
|
3.23, KonstantinB (ok), 14:59, 25/03/2017 [^] [^^] [^^^] [ответить]
| +/– |
Не, мне немного для другого. У меня типа протобуфов, только не протобуфы, и хочется это дело слать прямо веб-клиентам по вебсокетам.
| |
|
|
1.14, wooz (??), 15:56, 24/03/2017 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
А слабо парсить C-ные хедеры и строить формат данных из них?
Как правило при разборе дампов памяти или файловой системы, структура данных известна, но находится с *.h соответствующего проекта.
имхо, парсинг *.h - это первое, чему надо учить подобную программу.
| |
|
2.16, Forth (ok), 20:39, 24/03/2017 [^] [^^] [^^^] [ответить]
| +/– |
Кому как, мне лично видится функцией номер 1 генерация бинарников.
Парсинг это конечно здорово, но часто при написании парсеров бинарных протоколов нужен и обратный процесс.
| |
|
|
4.24, Forth (ok), 18:01, 25/03/2017 [^] [^^] [^^^] [ответить]
| +/– |
Супер. Крайне важная фича, без которой например в моих проектах просто никак.
| |
|
|
2.21, GreyCat (ok), 13:59, 25/03/2017 [^] [^^] [^^^] [ответить]
| +/– |
> А слабо парсить C-ные хедеры и строить формат данных из них?
Набросал за 15 минут на двух-с-половиной регэкспах: https://gist.github.com/GreyCat/9dba530b0d2cb8ccec4e1d6e90a0b565
Выдает полуфабрикат ksy, который можно доработать руками, попереименовать поля, дорасставить типы и т.д.
> Как правило при разборе дампов памяти или файловой системы, структура данных известна,
> но находится с *.h соответствующего проекта.
> имхо, парсинг *.h - это первое, чему надо учить подобную программу.
Конвертер .h -> .ksy вполне может быть отдельной программой, компилятор .ksy -> целевой язык тут вроде как не при чем. Да и, если честно, все по-разному. Даже если .h есть, то зачастую комментарии и документация по поводу полей лежит отдельно и все равно надо все это допиливать до ума.
| |
|
|
2.20, GreyCat (ok), 00:30, 25/03/2017 [^] [^^] [^^^] [ответить]
| +/– |
> Есть поддержка бинарных шаблонов от 010 Editor?
Нет, и вряд ли будет. 010 - почти чисто императивный язык, с циклами for, while и т.д. У нас - декларативный язык.
| |
|
1.25, Alexey (??), 17:18, 26/03/2017 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
А где находится компонент, который позволяет "представить в виде наглядной диаграммы"?
| |
|
2.26, GreyCat (ok), 17:47, 26/03/2017 [^] [^^] [^^^] [ответить]
| +/– |
В компиляторе. "ksc -t graphviz foo.ksy" и на выходе будет .dot-файл с диаграммой. Соответственно, чтобы получить картинку - что-то типа "dot -Tsvg foo.dot >foo.svg".
| |
|
1.28, Alexey (??), 08:42, 27/03/2017 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
И еще вопрос - есть формат, где одним элементом является строка A (strz) и два числа B и C (u4), которые повторяются пока не встретится нулевой байт (u1 = 0x1), т.е. что-то вроде: ABCABCABC0...тут другие данные....
Вы не подскажете как такое можно выразить в терминах kaitai? Я пробовал циклы, но они вроде подразумевают, что структура считывается полностью.
| |
|
2.30, GreyCat (ok), 10:52, 27/03/2017 [^] [^^] [^^^] [ответить]
| +/– |
> И еще вопрос - есть формат, где одним элементом является строка 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?
| |
|
3.31, Alexey (??), 11:01, 27/03/2017 [^] [^^] [^^^] [ответить]
| +/– |
"Эм, а еще предполагается, что может быть не всегда ABCABC0, а может быть, например ABCA0?"
Вот именно что ABCA0 быть не может, может быть только
* ABC0
* ABCABC0
* ABCABCABC0
и т.д.
| |
|
4.32, GreyCat (ok), 11:03, 27/03/2017 [^] [^^] [^^^] [ответить]
| +/– |
> "Эм, а еще предполагается, что может быть не всегда ABCABC0, а может
> быть, например ABCA0?"
> Вот именно что ABCA0 быть не может, может быть только
> * ABC0
> * ABCABC0
> * ABCABCABC0
> и т.д.
Тогда вышеописанный подход с подпотоком в целом решает вопрос.
| |
|
|
|
|