Bedeutung des Patchen von Binärdateien?

7

Ich versuche zu verstehen, was es bedeutet, indem ich Binärdateien in einem Beispiel aus der Manpage von xxd:

Patch the date in the file xxd.1
% echo "0000037: 3574 68" | xxd -r - xxd.1
% xxd -s 0x36 -l 13 -c 13 xxd.1
0000036: 3235 7468 204d 6179 2031 3939 36  25th May 1996
  1. Bedeutet das, dass Binärdateien bearbeitet werden, oder ist es wie in Wikipedia?

    Ein Patch ist eine Software, mit der Probleme 1 mit einem Computerprogramm oder seinen unterstützenden Daten behoben oder aktualisiert werden können.

  2. Wie xxdund patchunterscheiden sie sich und sind sie ähnlich?
  3. Was versucht das Beispiel zu tun?
Tim
quelle

Antworten:

12

Eine Datei zu patchen bedeutet, sie zu ändern, mit der Konnotation, dass die Änderung im Allgemeinen klein ist. Die Verwendung stammt aus der allgemeinen englischen Verwendung, bei der ein Patch eine kleine Modifikation ist (z. B. an einem Stück Stoff). Wenn es um Dateien geht, ist ein Patch nicht immer eine Reparatur.

Ein Patch besteht aus einer Reihe von Anweisungen, die beschreiben, wie eine Datei oder eine Reihe von Dateien geändert wird. In der Unix-Welt ist ein Patch normalerweise die Ausgabe des diffBefehls, der Änderungen in einer Textdatei beschreibt. Ein Patch in diesem Sinne beschreibt die Änderungen in Bezug auf das Hinzufügen, Entfernen oder Ändern von Zeilen in den Dateien. Das patchDienstprogramm wendet diese Anweisungen an, um eine Datei oder einen Satz von Dateien zu ändern. Es wird versucht, mehrere Patches auf dieselbe Datei anzuwenden, da der erste Patch Änderungen verursachen kann, die verhindern, dass der zweite angewendet wird, da sich die Datei nicht mehr im erwarteten Zustand befindet. Da diffund patchstark ihren Betrieb auf Linien basieren, sind sie nicht gut geeignet , um binäre Dateien.

xxdist ein generisches Dienstprogramm für die Arbeit mit Binärdateien. Eine seiner Funktionen besteht darin, Änderungen an einer Datei vorzunehmen. Zum Beispiel xxd -r - xxd.1bedeutet der Befehl , die an der Standardeingabe beschriebenen Änderungen anzuwenden. Der Beispiel-Patch (dh die Änderungsanweisungen) 0000037: 3574 68bedeutet: 0x37Ersetzen Sie ab dem Versatz (das sind 55 Dezimalstellen) die nächsten drei Bytes durch 0x35, 0x74 und 0x68 (dh die drei Zeichen 5th).

Gilles 'SO - hör auf böse zu sein'
quelle
4

Wenn Sie einen Patch auf eine Datei anwenden, überschreiben Sie einen Teil davon mit aktualisierten Daten (ein Patch kann auch zusätzliche Daten bis zum Ende anheften). Sie können jeden Dateityp patchen, egal ob es sich um Text, Binärdateien oder was auch immer handelt, da alle Dateien Ströme von Bytes sind, wenn es darauf ankommt.

Die Teile davon, die überschrieben werden sollen, sind in der Patch-Datei angegeben.

Wenn ein Software-Fix das Aktualisieren einer Datei umfasst, kann ein Patch die Datei so ändern, dass sie mit einer Vollversion einer aktualisierten Datei identisch ist. Da Patches nicht die vollständige Datei sind, sondern nur die Unterschiede, sind Patches kleiner, verbrauchen weniger Speicherplatz und verbrauchen beim Herunterladen weniger Bandbreite.

Die direkte Bearbeitung einer Binärdatei in einem Hex-Editor (z. B. hexer) wird manchmal als "manuelles" Patchen bezeichnet.

Ich bin nicht vertraut mit xxd, aber es sieht aus wie aus der vorläufigen Suche, xxddie einen Dump oder eine Hex-Auflistung von Binärdaten erzeugen und eine solche Auflistung auch wieder in eine reine Binärliste konvertieren kann. Sie können das Hex also mit xxdausgeben, mit vimoder einem anderen Texteditor bearbeiten und Änderungen mit einem zurückschreiben xxd -r. Sie können ihm auch eine Zeichenfolge echoim xxd"Hexdump-Format" zuweisen. (Mit anderen Optionen können Sie Änderungen an der Binärdatei vornehmen. Anscheinend xxdgibt es viele Optionen, mit denen Sie angeben können, wo das Überschreiben oder Patchen gestartet und gestoppt werden soll.)

Der erste Befehl im Beispiel sagt im Grunde, xxddass die Bytes in der Datei xxd.1beginnend mit dem Offset 0x0000037auf 0x35 0x74 0x68(ASCII für "5th") geändert werden sollen . xxdkann sein eigenes "Hexdump" -Format lesen und das ist es, was der "Echo" -Befehl bereitstellt xxd.

Der zweite Befehl im Beispiel gibt einen Count ( -c) von 13 Bytes in der Datei aus, beginnend mit demselben Offset.

Der patchBefehl macht eine ähnliche Sache, möchte aber Dateien in einem "diff" -Format. Sie können eine Diff-Datei erstellen, indem Sie die Ausgabe des diffBefehls speichern , der zwei Dateien vergleicht und die Unterschiede im Diff-Format ausdrückt. Nach dem Lesen der manSeite sieht es so aus, als ob Patch eher zum Ändern von Textdateien als für reine Binärdateien gedacht ist.

LawrenceC
quelle
2

Auf Mikrocontrollern haben Sie manchmal Programme, die den Programmspeicher verändern, dh das Programm selbst. Man könnte sagen, das Programm "mutiert", wenn es ausgeführt wird.

Dies ist nur eine Erklärung für das Ändern von Binäranwendungen.

Tatsächlich verwenden Sie in Mikrocontroller-Programmen häufig binäres Patching. Da es sich bei Ihrem Programm um Maschinencode handelt und Sie meistens in Assembler programmieren, ist der zusammengestellte Maschinencode eine direkte Darstellung dessen, was Sie programmiert haben. Sobald Ihr Code zusammengestellt ist, stellen Sie einfach Patches für einen Teil oder den gesamten Speicher des Mikrocontroller-Programms bereit.

Polemon
quelle