Tengo un binario ejecutable; Digamos que es a.out
. Puedo ver que el binario contiene cadenas
$ strings a.out
...
/usr/share/foo
....
Necesito cambiar la cadena /usr/share/foo
a /usr/share/bar
. ¿Puedo simplemente reemplazar la cadena con sed
?:
sed -i 's@/usr/share/foo@/usr/share/bar@' a.out
Esto parece algo seguro para hacer. ¿Funcionará esto también cuando las cadenas no tengan la misma longitud?
fuente
sed -i 's@longstring@foo@' a.out
? Esto hará que todo el binario sea más pequeño en 7 bytes. ¿Esto no corromperá el binario?NUL
terminador en una posición anterior como lo expliqué (aunque tal vez demasiado brevemente). El problema es que no puede tener unNUL
byte en la línea de comando, por lo que debe colocar sused
programa en un archivo y consultarlo-f
. Por otro lado, lo más seguro sería utilizar una herramienta diseñada para trabajar con datos binarios en lugar de lased
que está diseñada para trabajar con datos de texto.hexedit
cuando tengo que examinar o cambiar un archivo binario. Puede usarstrings -t x file | less
para localizar los desplazamientos de las cadenas (imprimibles) que desea cambiar antes de saltar al editor.\0
tendrá que hacerse con cuidado, porque si el reemplazo hace esto: "Mi nombre es \ 0 Mr Robot ", luego, al realizar operaciones con la cadena, el carácter '\ 0' creará problemas ya que la longitud se reducirá involuntariamente.NUL
vaya al final, adyacente a la existenteNUL
.