Ich habe eine ausführbare Binärdatei. Nennen wir es a.out
. Ich kann sehen, dass die Binärdatei Zeichenfolgen enthält
$ strings a.out
...
/usr/share/foo
....
Ich muss die Zeichenfolge /usr/share/foo
in ändern /usr/share/bar
. Kann ich den String einfach ersetzen durch sed
:
sed -i 's@/usr/share/foo@/usr/share/bar@' a.out
Dies scheint eine sichere Sache zu sein. Funktioniert das auch, wenn die Saiten nicht gleich lang sind?
quelle
sed -i 's@longstring@foo@' a.out
? Dadurch wird die gesamte Binärdatei um 7 Byte verkleinert. Wird die Binärdatei dadurch nicht beschädigt?NUL
Abschlusszeichen an einer früheren Position setzen, wie ich erklärt habe (obwohl dies möglicherweise zu kurz ist). Das Problem ist, dass Sie keinNUL
Byte in der Befehlszeile haben können, also müssen Sie Ihrsed
Programm in eine Datei einfügen und mit darauf verweisen-f
. Auf der anderen Seite wäre es sicherer, ein Tool zu verwenden, das für die Arbeit mit Binärdaten entwickelt wurde, anstatt fürsed
die Arbeit mit Textdaten.hexedit
wenn ich eine Binärdatei untersuchen oder ändern muss. Mit können Siestrings -t x file | less
die Offsets der (druckbaren) Zeichenfolgen suchen, die Sie ändern möchten, bevor Sie in den Editor springen.\0
sorgfältig erfolgen, denn wenn das Ersetzen dies tut: "Mein Name ist "0 Mr Robot", dann erzeugt das Zeichen "0" beim Ausführen von Operationen mit der Zeichenfolge Probleme, da sich die Länge unbeabsichtigt verringert.NUL
am Ende neben der vorhandenen endetNUL
.