Ищу программу (создание произвольных бинарных файлов)
Модератор: /dev/random
- Bizdelnick
- Модератор
- Сообщения: 20793
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Ищу программу
Нужна простая программка, и не могу поверить, что никто никогда такой не писал, но найти не удаётся. Подскажите, если вдруг кто знает.
Что требуется: на вход программа должна получать текстовое определение данных в легко читаемой и редактируемой форме, на выходе выдавать бинарный файл. Должна понимать директивы типа "записать байт с таким-то значением", "записать 32-битное беззнаковое число с таким-то порядком байт и таким-то значением", "заполнить байтами с таким-то значением до такого-то смещения", "записать столько-то 16-битных знаковых чисел с таким-то порядком байт и таким-то значением". Ну и возможность вставлять комментарии крайне желательна.
Upd. Поясню, почему не устраивает HEX-редактор. Во-первых, при работе с ним нужно держать перед глазами спецификацию файла, потому что комментариев не добавишь. Во-вторых, хочется держать данные в git и чётко видеть по diff'ам, что менялось. В-третьих, в нём долго искать нужное место, если имеется большая неиспользуемая область данных.
Что требуется: на вход программа должна получать текстовое определение данных в легко читаемой и редактируемой форме, на выходе выдавать бинарный файл. Должна понимать директивы типа "записать байт с таким-то значением", "записать 32-битное беззнаковое число с таким-то порядком байт и таким-то значением", "заполнить байтами с таким-то значением до такого-то смещения", "записать столько-то 16-битных знаковых чисел с таким-то порядком байт и таким-то значением". Ну и возможность вставлять комментарии крайне желательна.
Upd. Поясню, почему не устраивает HEX-редактор. Во-первых, при работе с ним нужно держать перед глазами спецификацию файла, потому что комментариев не добавишь. Во-вторых, хочется держать данные в git и чётко видеть по diff'ам, что менялось. В-третьих, в нём долго искать нужное место, если имеется большая неиспользуемая область данных.
Последний раз редактировалось Bizdelnick 01.07.2018 13:28, всего редактировалось 2 раза.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: Ищу программу
Не совсем понятно, что именно надо. Типа, на входе файл со строками, типа
На выходе в HEX:
Такое нужно?
Код: Выделить всё
записать байт 00
записать байт 01
записать байт 02
записать байт 03
записать байт 04
Код: Выделить всё
0001020304
- Bizdelnick
- Модератор
- Сообщения: 20793
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Ищу программу
devilr
Да, типа того.
Да, типа того.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: Ищу программу
В принципе не удивительно, что ни кто такое не писал.
Это все замечательно можно сделать в asm, просто написать файл с функциями для обработки, добавлять его директивой .include. И уже работать с функциями и макросами. В результате получится достаточно простой и понятный код, понимающий директивы, комментарии и т.п.
Это обычная работа с массивами.
Просто зачем придумывать новый синтаксис, если уже есть готовый который обеспечивает нужную функциональность...
Просто это все равно что написать новый ЯП, который ни кому не нужен, почти не кому.
Это все замечательно можно сделать в asm, просто написать файл с функциями для обработки, добавлять его директивой .include. И уже работать с функциями и макросами. В результате получится достаточно простой и понятный код, понимающий директивы, комментарии и т.п.
Это обычная работа с массивами.
Просто зачем придумывать новый синтаксис, если уже есть готовый который обеспечивает нужную функциональность...
Просто это все равно что написать новый ЯП, который ни кому не нужен, почти не кому.
Re: Ищу программу
Для такого asm? Сурово
- Bizdelnick
- Модератор
- Сообщения: 20793
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Ищу программу
Хм, об этом я не подумал… С ассемблером не особо дружен, но попробую, спасибо.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: Ищу программу
Не, ну если делать "функции и макросы", то проще сделать на том ЯП, который знаком и понятен. Я к тому, что разбирать строки на ассемблере - еще та задача.
Я бы входные данные сделал в виде XML или просто JSON и разбирал бы их...
Я бы входные данные сделал в виде XML или просто JSON и разбирал бы их...
Re: Ищу программу
Ну тут и согласен и нет. В асме массив представляет собой просто последовательность байт, по этому тут остаётся только записывать ячейки массива, с нужным смещением. А сам массив уже, записывать в файл.
А так да, лучше это делать теми инструментами, с которыми знаком.
При желании обработчик можно сделать даже на bash, а данные в файл записывать с помощью dd.
- Bizdelnick
- Модератор
- Сообщения: 20793
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Ищу программу
Если использовать ассемблер, возникает вопрос — можно ли его заставить создавать файл только с данными, не заворачивая их в ELF? Вот так в принципе получается то, что надо:
Но костыль с objcopy напрягает. Как сделать проще?
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
%
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: Ищу программу
Не этот костыль, лучшее решение, так как сразу выводит содержимое массива в секции data.
Иначе пришлось бы получать бинарник который в свою очередь направлял бы этот массив в файл, а это больше заморочек.
- Bizdelnick
- Модератор
- Сообщения: 20793
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Ищу программу
О, вот это очень близко к искомому. Не хватает разве что возможности заполнения до нужного смещения.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
- Bizdelnick
- Модератор
- Сообщения: 20793
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Ищу программу
Обнаружил, что практически всё нужное умеет radare2 (см. RAPATCH). У него, правда, свои приколы и с документацией неважно.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Спасибо сказали:
- Bizdelnick
- Модератор
- Сообщения: 20793
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Ищу программу
Какая занятная штука: http://www.jemarch.net/poke
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: Ищу программу
На аналогичную тему есть Katai Struct: https://kaitai.io/
- Bizdelnick
- Модератор
- Сообщения: 20793
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Ищу программу
Не, это тоже прикольная штука, но о другом. Генератор кода мне не нужен был, мне хотелось готовый инструмент. Я, правда, уже успел забыть ту конкретную задачу, для которой он был нужен. ☺
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: Ищу программу
Я не до конца понимаю что конкретно надо. Но вот возможно обойтись симбиозом хекс и редактором?
В этом варианте хекс хорошо редактируется и сохраняется:
Редактируем и конвертируем обратно:
И уже теперь сохраняем с измененными байтами.
Теперь смотрим в бинарном виде:
К сожалению только для чтения.
Обратно конвертировать уже не получится.
Последний вариант это именно то что ищется?
В этом варианте хекс хорошо редактируется и сохраняется:
Код: Выделить всё
vim file
:%!xxd #переводим в хекс
Код: Выделить всё
:%!xxd -r
Код: Выделить всё
:wq
Код: Выделить всё
vim file
:%!xxd -b
Обратно конвертировать уже не получится.
Последний вариант это именно то что ищется?
Добавлено (13:45):
Искалось- Bizdelnick
- Модератор
- Сообщения: 20793
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Ищу программу
Не надо, а было надо почти три года назад.☺
Нет. Речь шла об инструменте, преобразующем текстовое представление данных в двоичное неинтерактивно. То есть имеется некий проект в гите. Из него собирается какой-то код. Но помимо кода нужно собирать файл с двоичными данными в достаточно произвольном формате. При этом время от времени вносить изменения, и желательно, чтобы их было легко увидеть и понять по git diff, да и просто открыв файл и прочитав комментарии. А команда создания двоичного файла из текстового прописывается в Makefile. Примерно так я себе это представлял.
Добавлено (14:44):
Кажется, вспомнил. Хотел заливать в ардуинку содержимое EEPROM, сформированное таким образом.Bizdelnick писал: ↑02.03.2021 18:08Я, правда, уже успел забыть ту конкретную задачу, для которой он был нужен.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Спасибо сказали: