J'ai un binaire exécutable; appelons ça a.out
. Je peux voir que le binaire contient des chaînes
$ strings a.out
...
/usr/share/foo
....
Je dois changer la chaîne /usr/share/foo
en /usr/share/bar
. Puis-je simplement remplacer la chaîne par sed
?:
sed -i 's@/usr/share/foo@/usr/share/bar@' a.out
Cela ressemble à une chose sûre à faire. Cela fonctionnera-t-il également lorsque les cordes ne sont pas de la même longueur?
la source
sed -i 's@longstring@foo@' a.out
? Cela rendra le binaire entier plus petit de 7 octets, cela ne corrompra-t-il pas le binaire?NUL
terminateur à une position antérieure comme je l'ai expliqué (bien que peut-être trop brièvement). Le problème est que vous ne pouvez pas avoir unNUL
octet sur la ligne de commande, vous devez donc mettre votresed
programme dans un fichier et vous y référer avec-f
. D'un autre côté, la chose la plus sûre à faire serait d'utiliser un outil conçu pour fonctionner avec des données binaires au lieu desed
celui conçu pour fonctionner avec des données texte.hexedit
lorsque je dois examiner ou modifier un fichier binaire. Vous pouvez utiliserstrings -t x file | less
pour localiser les décalages des chaînes (imprimables) que vous souhaitez modifier avant de sauter dans l'éditeur.\0
devra être fait avec soin, car si le remplacement fait ceci: "Mon nom est \ 0 Mr Robot ", puis lors de l'exécution des opérations avec la chaîne, le caractère" \ 0 "créera des problèmes car la longueur diminuera involontairement.NUL
, à côté de l'existantNUL
.