Saya tidak tahu apakah versi Anda sed
akan biner-bersih atau jika akan tersedak apa yang dianggapnya adalah garis yang panjang dalam inputnya, tetapi jika tidak ada masalah itu, mengedit string di tempat harusnya berfungsi. Untuk melihat apakah benar, bandingkan dengan versi lama dan baru cmp -l
. Ini akan memberi tahu Anda apakah hanya tiga perbedaan antara kedua file tersebut yaitu 3 byte.
Mengedit string dalam executable yang dikompilasi memang akan berfungsi jika string memiliki panjang yang sama, tetapi hampir selalu juga berfungsi jika Anda memperpendek string, karena cara string bekerja dalam C. Dalam string C, semuanya setelah NUL
terminator tidak masuk hitungan, jadi jika Anda menulis NUL
terminator baru sebelum posisi yang lama, Anda akan secara efektif mempersingkat string.
Secara umum, tidak ada cara Anda dapat memperpanjang string menggunakan hack ini.
sed -i 's@longstring@foo@' a.out
? Ini akan membuat seluruh biner lebih kecil dengan 7 byte, Apakah ini tidak akan merusak biner?