Ищу программу (создание произвольных бинарных файлов)

Софт под Linux, разные программы, но только связанные с Linux

Модератор: /dev/random

Ответить
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Ищу программу

Сообщение Bizdelnick »

Нужна простая программка, и не могу поверить, что никто никогда такой не писал, но найти не удаётся. Подскажите, если вдруг кто знает.
Что требуется: на вход программа должна получать текстовое определение данных в легко читаемой и редактируемой форме, на выходе выдавать бинарный файл. Должна понимать директивы типа "записать байт с таким-то значением", "записать 32-битное беззнаковое число с таким-то порядком байт и таким-то значением", "заполнить байтами с таким-то значением до такого-то смещения", "записать столько-то 16-битных знаковых чисел с таким-то порядком байт и таким-то значением". Ну и возможность вставлять комментарии крайне желательна.

Upd. Поясню, почему не устраивает HEX-редактор. Во-первых, при работе с ним нужно держать перед глазами спецификацию файла, потому что комментариев не добавишь. Во-вторых, хочется держать данные в git и чётко видеть по diff'ам, что менялось. В-третьих, в нём долго искать нужное место, если имеется большая неиспользуемая область данных.
Последний раз редактировалось Bizdelnick 01.07.2018 13:28, всего редактировалось 2 раза.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
devilr
Сообщения: 3667
ОС: Mandriva => Gentoo (~amd64)
Контактная информация:

Re: Ищу программу

Сообщение devilr »

Не совсем понятно, что именно надо. Типа, на входе файл со строками, типа

Код: Выделить всё

записать байт 00
записать байт 01
записать байт 02
записать байт 03
записать байт 04
На выходе в HEX:

Код: Выделить всё

0001020304
Такое нужно?
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Эхо разума
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Ищу программу

Сообщение Bizdelnick »

devilr
Да, типа того.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 2645
ОС: Gentoo

Re: Ищу программу

Сообщение ormorph »

В принципе не удивительно, что ни кто такое не писал.
Это все замечательно можно сделать в asm, просто написать файл с функциями для обработки, добавлять его директивой .include. И уже работать с функциями и макросами. В результате получится достаточно простой и понятный код, понимающий директивы, комментарии и т.п.
Это обычная работа с массивами.
Просто зачем придумывать новый синтаксис, если уже есть готовый который обеспечивает нужную функциональность...
Просто это все равно что написать новый ЯП, который ни кому не нужен, почти не кому. :)
Спасибо сказали:
Аватара пользователя
devilr
Сообщения: 3667
ОС: Mandriva => Gentoo (~amd64)
Контактная информация:

Re: Ищу программу

Сообщение devilr »

Для такого asm? Сурово :)
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Эхо разума
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 2645
ОС: Gentoo

Re: Ищу программу

Сообщение ormorph »

devilr писал(а):
01.07.2018 13:25
Для такого asm? Сурово :)
Ага :)
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Ищу программу

Сообщение Bizdelnick »

ormorph писал(а):
01.07.2018 13:23
Это все замечательно можно сделать в asm
Хм, об этом я не подумал… С ассемблером не особо дружен, но попробую, спасибо.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
devilr
Сообщения: 3667
ОС: Mandriva => Gentoo (~amd64)
Контактная информация:

Re: Ищу программу

Сообщение devilr »

Не, ну если делать "функции и макросы", то проще сделать на том ЯП, который знаком и понятен. Я к тому, что разбирать строки на ассемблере - еще та задача. :)
Я бы входные данные сделал в виде XML или просто JSON и разбирал бы их...
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Эхо разума
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 2645
ОС: Gentoo

Re: Ищу программу

Сообщение ormorph »

devilr писал(а):
01.07.2018 13:37
Не, ну если делать "функции и макросы", то проще сделать на том ЯП, который знаком и понятен. Я к тому, что разбирать строки на ассемблере - еще та задача. :)
Я бы входные данные сделал в виде XML или просто JSON и разбирал бы их...
Ну тут и согласен и нет. В асме массив представляет собой просто последовательность байт, по этому тут остаётся только записывать ячейки массива, с нужным смещением. А сам массив уже, записывать в файл.
А так да, лучше это делать теми инструментами, с которыми знаком.
При желании обработчик можно сделать даже на bash, а данные в файл записывать с помощью dd.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Ищу программу

Сообщение Bizdelnick »

Если использовать ассемблер, возникает вопрос — можно ли его заставить создавать файл только с данными, не заворачивая их в ELF? Вот так в принципе получается то, что надо:

Shell

% cat test.S
.data
.byte 0x00, 0x01, 0x02, 0x03, 0x04
% as -o test.o test.S
% objcopy --dump-section .data=test test.o
% hd test
00000000 00 01 02 03 04 |.....|
00000005
%
Но костыль с objcopy напрягает. Как сделать проще?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 2645
ОС: Gentoo

Re: Ищу программу

Сообщение ormorph »

Bizdelnick писал:
01.07.2018 14:05
Но костыль с objcopy напрягает. Как сделать проще?
Не этот костыль, лучшее решение, так как сразу выводит содержимое массива в секции data.
Иначе пришлось бы получать бинарник который в свою очередь направлял бы этот массив в файл, а это больше заморочек.
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu
Контактная информация:

Re: Ищу программу

Сообщение serzh-z »

Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Ищу программу

Сообщение Bizdelnick »

serzh-z писал:
01.07.2018 14:35
См. https://github.com/dadadel/binmake.
О, вот это очень близко к искомому. Не хватает разве что возможности заполнения до нужного смещения.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Ищу программу

Сообщение Bizdelnick »

Обнаружил, что практически всё нужное умеет radare2 (см. RAPATCH). У него, правда, свои приколы и с документацией неважно.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Ищу программу

Сообщение Bizdelnick »

Какая занятная штука: http://www.jemarch.net/poke
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
bormant
Сообщения: 1354

Re: Ищу программу

Сообщение bormant »

На аналогичную тему есть Katai Struct: https://kaitai.io/
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Ищу программу

Сообщение Bizdelnick »

bormant писал(а):
02.03.2021 17:40
На аналогичную тему есть Katai Struct
Не, это тоже прикольная штука, но о другом. Генератор кода мне не нужен был, мне хотелось готовый инструмент. Я, правда, уже успел забыть ту конкретную задачу, для которой он был нужен. ☺
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 901
ОС: debian, fedora (i3-wm)

Re: Ищу программу

Сообщение olecya »

Я не до конца понимаю что конкретно надо. Но вот возможно обойтись симбиозом хекс и редактором?
В этом варианте хекс хорошо редактируется и сохраняется:

Код: Выделить всё

vim file
:%!xxd #переводим в хекс
Редактируем и конвертируем обратно:

Код: Выделить всё

:%!xxd -r
И уже теперь сохраняем с измененными байтами. Теперь смотрим в бинарном виде:

Код: Выделить всё

vim file
:%!xxd -b
К сожалению только для чтения.
Обратно конвертировать уже не получится.
Последний вариант это именно то что ищется?
Добавлено (13:45):
Искалось :)
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Ищу программу

Сообщение Bizdelnick »

olecya писала:
03.03.2021 13:43
Я не до конца понимаю что конкретно надо.
Не надо, а было надо почти три года назад.☺
olecya писала:
03.03.2021 13:43
Но вот возможно обойтись симбиозом хекс и редактором?
Нет. Речь шла об инструменте, преобразующем текстовое представление данных в двоичное неинтерактивно. То есть имеется некий проект в гите. Из него собирается какой-то код. Но помимо кода нужно собирать файл с двоичными данными в достаточно произвольном формате. При этом время от времени вносить изменения, и желательно, чтобы их было легко увидеть и понять по git diff, да и просто открыв файл и прочитав комментарии. А команда создания двоичного файла из текстового прописывается в Makefile. Примерно так я себе это представлял.
Добавлено (14:44):
Bizdelnick писал:
02.03.2021 18:08
Я, правда, уже успел забыть ту конкретную задачу, для которой он был нужен.
Кажется, вспомнил. Хотел заливать в ардуинку содержимое EEPROM, сформированное таким образом.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Ответить