Eu tenho um binário executável; vamos chamá-lo a.out
. Eu posso ver o binário contém cadeias
$ strings a.out
...
/usr/share/foo
....
Eu preciso mudar a string /usr/share/foo
para /usr/share/bar
. Posso apenas substituir a string por sed
?:
sed -i 's@/usr/share/foo@/usr/share/bar@' a.out
Parece uma coisa segura a se fazer. Isso também funcionará quando as seqüências não tiverem o mesmo comprimento?
fonte
sed -i 's@longstring@foo@' a.out
? Isso tornará o binário inteiro menor em 7 bytes. Isso não corromperá o binário?NUL
terminador em uma posição anterior, como expliquei (embora talvez por pouco tempo). O problema é que você não pode ter umNUL
byte na linha de comando, portanto, você deve colocar seused
programa em um arquivo e consultá-lo com-f
. Por outro lado, a coisa mais segura a se fazer seria usar uma ferramenta projetada para trabalhar com dados binários, em vez desed
projetar para trabalhar com dados de texto.hexedit
quando tenho que examinar ou alterar um arquivo binário. Você pode usarstrings -t x file | less
para localizar os deslocamentos das cadeias (imprimíveis) que deseja alterar antes de pular para o editor.\0
terá que ser feito com cuidado, porque se a substituição fizer isso: "Meu nome é \ 0 Mr Robot "e, ao executar operações com a string, o caractere '\ 0' criará problemas, pois o comprimento será reduzido sem intenção.NUL
continue no final, adjacente à existenteNUL
.