The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Релиз системы разбора бинарных файлов Kaitai Struct 0.6"
Версия для распечатки Пред. тема | След. тема
Форум Разговоры, обсуждение новостей
Исходное сообщение [ Отслеживать ]
Присылайте удачные настройки в раздел примеров файлов конфигурации на WIKI.opennet.ru.
. "Релиз системы разбора бинарных файлов Kaitai Struct 0.6" +/
Сообщение от GreyCat (ok), 05-Фев-17, 17:26 
> Поднимается, потому что задач таких много, а KS штука вкусная, судя по
> описаниям, и хочется совместить :)
> 1 - сигнатуры следующего заголовка нет в нужном месте, значит битые. С
> точки зрения автоматического анализа - в том-то и фишка, что тут
> нужно передать всю бинарщину в "умный" код (не декларативный). А от
> него в итоге получить в ответ, где следующий заголовок

Ну, в самом тупом виде, в управляющей программе что-то типа:

    while (!io.eof()) {
        long oldPos = io.pos();
        try {
            Packet pkt = new Packet(io);
        } catch (InvalidDataException e) {
            // попали на битые данные
            long newPos = oldPos + somePacketSize;
            // в этот момент от oldPos до io.pos() - читающаяся часть пакета
            // весь пакет, видимо, от oldPos до newPos

            // если он нужен как бинарный кусок
            io.seek(oldPos);
            byte[] brokenPkt = io.readBytes(newPos - oldPos);

            // если просто нужно перейти к парсингу с новой позиции
            io.seek(newPos);
        }
    }

Это все на самом деле можно уже сейчас. Простая проверка сигнатур есть в KS чуть лин е самого начала.

> 2 - да, именно это и хочется. Чтобы выкинули и можно было
> самостоятельно сдвинуться, потом вернуть управление. Все равно "весь" объект разом разбирать
> не надо (он может быть длиной и в терабайт, и вообще
> быть живым дописываемом в процессе обработки потоком). Т.е. так сейчас можно?

Выше пример привел.

> Про поправить код руками я, конечно, понимаю, но вот именно для этого
> и хотелось бы использовать Kaitai Struct. Там время от времени формат
> файла меняется, и есть необходимость поддерживать разные версии. Если бы не
> этот факт, можно было и не брать декларативные описания.. а в
> текущих реалиях без них просто будет некрасиво. И, конечно, хотелось бы
> использовать сколько-либо готовое решение, я не писать с нуля автомат. А
> если код менять руками, то как потом менять описание?.. Поменяешь и
> опять вручную на этот код накатывать изменения.. брр.

В общем, если алгоритм выше устраивает - вперед ;)

Ответить | Правка | Наверх | Cообщить модератору

Оглавление
Релиз системы разбора бинарных файлов Kaitai Struct 0.6, opennews, 05-Фев-17, 00:09  [смотреть все]
Форумы | Темы | Пред. тема | След. тема



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру