У меня есть исполняемый двоичный файл; давайте назовем это a.out
. Я вижу, что бинарный файл содержит строки
$ strings a.out
...
/usr/share/foo
....
Мне нужно изменить строку /usr/share/foo
на /usr/share/bar
. Могу ли я просто заменить строку на sed
?
sed -i 's@/usr/share/foo@/usr/share/bar@' a.out
Это выглядит как безопасная вещь. Будет ли это работать, когда строки не одинаковой длины?
источник
sed -i 's@longstring@foo@' a.out
? Это сделает весь двоичный файл меньше на 7 байтов. Разве это не повредит двоичный файл?NUL
терминатор на более раннюю позицию, как я объяснил (хотя, может быть, слишком кратко). Проблема в том, что у вас не может бытьNUL
байта в командной строке, поэтому вы должны поместить своюsed
программу в файл и обратиться к нему с помощью-f
. С другой стороны, безопаснее было бы использовать инструмент, предназначенный для работы с двоичными данными, аsed
не для работы с текстовыми данными.hexedit
когда мне нужно проверить или изменить двоичный файл. Вы можете использовать,strings -t x file | less
чтобы найти смещения (для печати) строк, которые вы хотите изменить, прежде чем переходить в редактор.\0
должно быть выполнено осторожно, потому что, если замена делает это: «Мое имя is \ 0 Mr Robot ", то при выполнении операций со строкой символ '\ 0' создаст проблемы, так как длина будет непреднамеренно уменьшаться.NUL
конец шел рядом с существующимNUL
.