Сейчас на форуме: jinoweb, bartolomeo, rmn (+4 невидимых)

 eXeL@B —› Программирование —› Парсинг бинарного файла
Посл.ответ Сообщение


Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 28 мая 2014 18:28
· Личное сообщение · #1

Добрый день, товарищи. Есть у меня бинарный файл проприетарного формата. И хотелось бы мне парсить его, извлекая только некоторые нужные структуры. Т.е. надо бы наваять парсер. Формат известен, мешает только то, что мне не нравится, что получается в результате. Например, есть у нас некое поле - это размер. Следом за размером идёт содержимое.

Code:
  1. 02 11 11


Здесь размер равен 2, а 11 11 - содержимое этого поля. Некоторые поля фиксированного размера, например, только байт, или только 2, и все поля перемешаны. Если писать парсер в лоб, то он должен читать размер, потом читать содержимое, и т.д. Это как-то коряво, нет ли каких-то движков парсеров, как для парсинга обычного текста?

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

Создано: 28 мая 2014 18:32
· Личное сообщение · #2

поиск оного парсера сопоставим с написанием парсера (на С# например) - IMHO

| Сообщение посчитали полезным: daFix


Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 28 мая 2014 21:07
· Личное сообщение · #3

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

-----
Research For Food


| Сообщение посчитали полезным: dosprog

Ранг: 0.0 (гость)
Активность: 0.250
Статус: Участник

Создано: 28 мая 2014 21:33
· Личное сообщение · #4

ARCHANGEL пишет:
Т.е. надо бы наваять парсер. Формат известен, мешает только то, что мне не нравится, что получается в результате


Если есть описание, то используйте питоновские конверторы, которые .h переведут в питоновские ctypes ( вы вроде бы начали на нем писать )
Парсеров полно, зависит от языка описания, который опять же нужно знать.



Ранг: 431.7 (мудрец), 390thx
Активность: 0.730.32
Статус: Участник

Создано: 29 мая 2014 02:27 · Поправил: dosprog
· Личное сообщение · #5

ARCHANGEL пишет:
Здесь размер равен 2, а 11 11 - содержимое этого поля. Некоторые поля фиксированного размера, например, только байт, или только 2, и все поля перемешаны. Если писать парсер в лоб, то он должен читать размер, потом читать содержимое, и т.д.


Вообще-то как иначе, если не в лоб?.. Например, тот же разбор .ЕХЕ.
Или ещё более удачный пример - разбор .OBJ. Он весь состоит из массивов с типом и счётчиком в начале.

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

Если нужно только поглядеть поля структуры, то была старинная утилита от SEN'а (1993 г.) - -->StructLook<--.
Не знаю, насколько поможет. Структуры только заранее известного размера. Например, паскаль-строку в шаблоне StructLook не опишешь.

Добавлено:(Хотя, могу и ошибаться. Просто не пользовался всерьёз той утилитой).


daFix пишет:
ARCHANGEL
Да напиши сам, оно хоть и кажется нудным и корявым, но минут за 20 всё можно сделать. [...]


Пожалуй, самое простое решение.






Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 29 мая 2014 09:38
· Личное сообщение · #6

Ок, ладно, просто я наивно полагал, что, возможно, есть какая-то утиль на подобие Flex+Bison, только для генерации таких вот парсеров формата.

-----
Stuck to the plan, always think that we would stand up, never ran.





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 29 мая 2014 09:47
· Личное сообщение · #7

тот же TLV только без тага



Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 29 мая 2014 10:27
· Личное сообщение · #8

в WinHex шаблон сделать

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 29 мая 2014 10:38
· Личное сообщение · #9

шаблон если известны смещения
а если это стрим, то его и парсить нужно как стрим
сомневаюсь что winhex умеет парсить стримы? скорее всего только шаблоны накладывать




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 29 мая 2014 15:12
· Личное сообщение · #10

В общем, я осилил. Всем спасибо. Делал чтением "в лоб".

-----
Stuck to the plan, always think that we would stand up, never ran.



 eXeL@B —› Программирование —› Парсинг бинарного файла
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати