2016-01-31 10 views
6

einmal vor langer Zeit, aus Neugier, habe ich versucht, Hex-Bearbeitung die ausführbare Datei des Spiels „Dangerous Dave“. Ich habe mich in der Datei nach möglichen Strings umgesehen und einige zufällige Änderungen vorgenommen, um zu sehen, ob der Text im Spiel tatsächlich geändert wird.Wiederverwendung von Zeichen in kompilierten Exe-Datei

Ich war überrascht, um das Ergebnis zu sehen, was ich jetzt einen Hex-Editor und DOSBox neu erstellt worden mit: enter image description here

Wie zu sehen ist, die Bearbeitung der beiden Zeichen „RO“ in der Zeichenfolge „ROMERO“ geführt in 4 Zeichen geändert, mit dem Ergebnis wird "ZUMEZU". Es sieht so aus, als ob das Programm die beiden Zeichen wiederverwendet und sie am Anfang und am Ende dieser Zeichenfolge druckt.

Was ist die Ursache dafür? Meine erste Vermutung wäre, die ausführbare Datei kleiner zu machen, aber nur der Code, der die Zeichen wiederverwendet, würde wahrscheinlich mehr Speicherplatz benötigen als diese 2 Bytes, die gespeichert werden sollen. Ist es nur ein Trick vom Autor getan, oder nur ein Compiler Voodoo?

Antwort

5

Tricky zu sagen, ohne Reverse-Engineering, aber meine Vermutung wäre, dass viele der konstanten Daten im Programm mit einem Algorithmus aus der LZ family komprimiert wird. Diese Komprimierungsschemata funktionieren im Wesentlichen auf die Weise, die Sie beobachtet haben: Sie codieren wiederholte Teilstrings als Verweise auf Text, der zuvor dekodiert wurde.

Diese Kompressionsalgorithmen wahrscheinlich für mehr als nur diese eine Zeichenfolge verwendet wurden, und zwar nicht nur für Text entweder; Es ist durchaus möglich, dass sie auch zur Komprimierung anderer Daten wie Grafiken oder Ebenenlayouts verwendet wurden. Kurz gesagt, gab es wahrscheinlich erhebliche Einsparungen durch die Verwendung dieses Algorithmus!

Die Verwendung dieser Komprimierungsalgorithmen ist in älteren Spielen als eine Möglichkeit spart Speicherplatz gemeinsam, war aber nicht automatisch - die Umsetzung dieses Algorithmus wahrscheinlich etwas Romero gewesen selbst hinzugefügt würde.

+0

Ebenso gibt es zwei zusätzliche Bytes zwischen „SOFT“ und „DISK, INC“ - auch ein typisches Anzeichen für byteweise Kompression. – usr2564301

Verwandte Themen