2016-07-03 21 views
2

Lesen Ich beobachte Mario glitcheines Programms eigenen Speicher als Daten

Wo die Mario gameboy Patrone seinen eigenen Speicher als Pegeldaten liest.

Wie kann ich auf den aktuellen Speicher eines Programms zugreifen, das ich gerade aktiviere? (Jede Sprache, obwohl ich denke, C oder Assembly ist der Ort zu starten)

+0

Nur ein paar Gedanken ... Sie können Stack Smashing versuchen. Oder Sie können ein 1 Byte Shared Memory-Segment an Ihr Prozessabbild anhängen und versuchen, über seine Größe hinaus zu lesen. –

+0

Das Lesen von Ebenen aus dem Programmspeicher und das Lesen zufälliger Positionen im Programmspeicher ist nicht dasselbe. Der erste ist vollkommen legal, während der zweite ein undefiniertes Verhalten ist. – dasblinkenlight

+0

@dasblinkenlight, in Assembly ist es eigentlich egal, mit welchen Registersätzen man arbeitet. Sie müssen sicherlich viel mit dem Stack-Pointer lesen und interagieren, um etwas Interessantes in der Assembly zu tun. Und die Baugruppe ist der Befehlsspeicher. Natürlich ist das Lesen eines anderen Prozessspeichers immer schlecht und etwas Verrücktes zu tun, wie das Schreiben in den Stack- oder Instruktionsspeicher wird fast immer etwas zum Absturz bringen. – Iverelo

Antwort

2

In der Montage können Sie die ESP (stack pointer) and EIP (instruction pointer) Register direkt lesen. Sie haben die Adresse an den Anfang des Stapels bzw. die aktuelle Anweisung. Von dort können Sie den Speicher, der Stapel und Anweisungen direkt lesen.

In diesem Video überholten sie die Level-Daten und das Spiel begann die Stack-Daten als Level-Daten zu interpretieren. Er schreibt dann in einen Offset im Stapel, indem er Bausteine ​​bricht, die den Speicher für die nächste Ebene enthalten.

Da es immer dieselben Bausteine ​​mit denselben Daten sind, bedeutet das, dass das Speicherlayout sehr deterministisch ist, was für ein altes Kartuschensystem, bei dem nichts anderes auf dem Prozessor läuft, keine Überraschung ist. Sie könnten die Daten direkt schreiben, wenn Sie Zugriff auf die Konsole hatten und den Offset kennen.