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/fooa /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?NULterminador en una posición anterior como lo expliqué (aunque tal vez demasiado brevemente). El problema es que no puede tener unNULbyte en la línea de comando, por lo que debe colocar susedprograma 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 lasedque está diseñada para trabajar con datos de texto.hexeditcuando tengo que examinar o cambiar un archivo binario. Puede usarstrings -t x file | lesspara localizar los desplazamientos de las cadenas (imprimibles) que desea cambiar antes de saltar al editor.\0tendrá 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.NULvaya al final, adyacente a la existenteNUL.