Saya memiliki biner yang dapat dieksekusi; sebut saja itu a.out
. Saya bisa melihat biner berisi string
$ strings a.out
...
/usr/share/foo
....
Saya perlu mengubah string /usr/share/foo
ke /usr/share/bar
. Bisakah saya hanya mengganti string dengan sed
?:
sed -i 's@/usr/share/foo@/usr/share/bar@' a.out
Ini sepertinya hal yang aman untuk dilakukan. Apakah ini juga akan berfungsi jika senarnya tidak sama panjang?
sumber
sed -i 's@longstring@foo@' a.out
? Ini akan membuat seluruh biner lebih kecil dengan 7 byte, Apakah ini tidak akan merusak biner?NUL
terminator pada posisi sebelumnya seperti yang saya jelaskan (walaupun mungkin terlalu singkat). Masalahnya adalah Anda tidak dapat memilikiNUL
byte pada baris perintah sehingga Anda harus meletakkansed
program Anda ke dalam file dan merujuknya-f
. Di sisi lain, hal yang lebih aman untuk dilakukan adalah dengan menggunakan alat yang dirancang untuk bekerja dengan data biner daripadased
yang dirancang untuk bekerja dengan data teks.hexedit
ketika saya harus memeriksa atau mengubah file biner. Anda dapat menggunakanstrings -t x file | less
untuk menemukan offset dari string (yang dapat dicetak) yang ingin Anda ubah sebelum masuk ke dalam editor.\0
harus dilakukan dengan hati-hati, karena jika penggantian melakukan ini: "Nama saya adalah \ 0 Mr Robot ", lalu saat melakukan operasi dengan string, karakter '\ 0' akan menimbulkan masalah karena panjangnya akan berkurang secara tidak sengaja.NUL
di akhir, berdekatan dengan yang sudah adaNUL
.