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