Patch

Aus C64-Wiki
Zur Navigation springenZur Suche springen

Ein Patch (zu deutsch: Korrektur) ist eine Maßnahme zur Änderung eines Computerprogramms. Mittels eines Patches werden typischerweise Fehler behoben (dann auch Fix genannt) oder dem Programm weitere kleine Funktionen hinzugefügt (siehe Update). Ein Patch wird meist durch den Programmierer der Originalsoftware bzw. dem Hersteller oder dem Vertreiber (englisch Publisher) der Software erstellt und herausgegeben.

In der früheren Zeit wurde BASIC-Listings in Computerzeitschriften wie 64'er, Happy Computer, RUN, usw. als Listing zum Abtippen veröffentlicht. In der Kürze der Zeit zwischen dem Erscheinen der Publikation und der Einsendung des Programms durch den Programmierer und durch den damligen aufwendigeren Herstellungsprozeß schlichen sich immer wieder Mal Bugs ein, die beim Programmnutzer im schlimmsten Fall zu Abstürzen bzw. zu nicht lauffähigen Programmen führen konnten.

Daher wurde jeden Monat in einer eigenen Rubrik, die in der 64'er z.B. Fehlerteufelchen hieß, oder in den Leserbriefen kleine Maßnahmen zur Fehlerbehebung veröffentlicht. Die kleinste Patch-Maßnahme wäre demnach ein oder mehrere POKEs oder die Veröffentlichung der korrigierten BASIC-Zeilen.

Umfangreichere Patches oder Patches für durch den Endanwender schlecht editierbare Programme (z.B. in Maschinensprache ausgelieferte Programme oder falls das zu patchende Programm ein spezielles Dateiformat wie VLIR benutzt) werden meist mit Hilfe eines Hilfsprogramms (englisch Tool) durchgeführt. Alternativ kann der Patch auch selbst als ausführbares Programm ausgeliefert werden, das dann eine Kombination aus den zur Durchführung des Patches nötigen Daten und dem nötigen Tool darstellt.

Wird der Patch nicht durch ein Tool ausgeführt, muss bei Heimcomputersystemen der Anwender normalerweise die fehlerhafte Software laden, den Patch anwenden und abschließend die fehlerfreie Software wieder auf einem Datenträger abgespeichern.

Ausprägungen[Bearbeiten | Quelltext bearbeiten]

  • In Place Patch oder direkter Patch: Der fehlerhafte Code wird durch den korrigierten ersetzt und nimmt dessen Platz ein. Z.B. kleine Korrekturen, die Argumente von Maschinencode-Instruktionen ändern, den Opcode selbst und damit die Bedeutung einer Instruktion ändern. Letzteres oft auch in dem Zusammenhang, eine Aktion zu unterdrücken, wobei mit Hilfe von NOPs der bestehende Code überschrieben wird.
    Eigenschaften:
    • Gute Kompatibilität, aber je nach Länge des Patches, kann die Wahrscheinlichkeit steigen, eventuell entsprechende Einsprungpunkte im alten Code berücksichtigen zu müssen bzw. verloren gehen.
  • Rucksack-Patch[1]: Wenn der Ersatz für den problematischen Code oder Fehler größer ausfällt, bedient man sich des Tricks, im alten Code an passender Stelle mit einem Sprungbefehl wie JSR oder JMP bzw. einem passenden Branch-Befehl zum eigentlichen Patch-Code zu verzweigen und dann nach vollbrachtem Werk wieder an den Aufrufort zurück zu kehren.
    Eigenschaften:
    • Umfangreichere Patches und damit aufwändigeres Verhalten kann untergebracht werden, vorausgesetzt, genügend anderweitiger Platz ist vorhanden. Das kann unter Umständen auch zu Lasten andere Funktionen eines Programms gehen, die nicht oder nur selten in Gebrauch wären. Typischer Fall: Ersatz der Tape-Routinen oder RS-232-Routinen im KERNAL bei Floppy-Speeder.
    • Hinsichtlich Kompatibilität wird damit erreicht, dass in der nähe befindliche Einsprungpunkte erhalten bleiben, kann sozusagen als minimalinvasiver Eingriff angesehen werden.

Weblinks[Bearbeiten | Quelltext bearbeiten]

WP-W11.png Wikipedia: Patch (Software)


Quellen