Я не знаю, будет ли ваша версия sed
очищена в двоичном формате или если она захлебнется тем, что она считает действительно длинными строками ввода, но, исключая эти проблемы, редактирование строки на месте должно работать. Чтобы увидеть, работает ли это, сравните старую и новую версии с cmp -l
. Он должен сказать вам, являются ли единственные три различия между этими двумя файлами эти 3 байта.
Редактирование строк в скомпилированном исполняемом файле действительно будет работать, если строки имеют одинаковую длину, но почти всегда будет работать и при сокращении строки из-за способа, которым строки работают в C. В строках C все после NUL
терминатора не считается, поэтому, если вы напишите новый NUL
терминатор перед позицией старого, вы фактически сократите строку.
В общем, вы не можете удлинить строку с помощью этого хака.
sed -i 's@longstring@foo@' a.out
? Это сделает весь двоичный файл меньше на 7 байтов. Разве это не повредит двоичный файл?