Berechnen Sie die linke / rechte Stereoklangpositionierung
In DX-Ball liefert ein Ziegelsteintreffer eine horizontale Bildschirmposition. Der Soundcode wandelt ihn in einen Links / Rechts-Schwenkwert um.
Der Dekompilierer zeigt für die Ausgangsfunktion 0x00406400 nur einen Aufruf von __ftol(). REA liefert auch die Maschinenbefehle und die aufrufenden Funktionen. Damit kann der Agent die fehlenden Rechenschritte untersuchen.
Neu bei diesen Bedingungen?
-
Anweisung: die Schritte, die der Prozessor ausführt, werden in lesbarer Form dargestellt, wie z
MOVoderADD. - Dekompiler-Ergebnis / Pseudocode: der Versuch eines Analysewerkzeugs, Anweisungen wieder in C-ähnlichen Code umzuwandeln. Es kann Teile vermissen, wie in diesem Beispiel.
- Aufrufende Funktion: Sie ruft diese Funktion auf und zeigt, welche Werte dabei übergeben werden.
-
Anschrift: eine Stelle im Programm, die hexadezimal geschrieben ist, z. B.:
0x00406400. - Konstant: feste Zahlen, die im Programm gespeichert, als Rohbytes gelesen und dekodiert werden.
Drei Beweise, eine Rechnung
- 01 * AnleitungEine ganzzahlige EingabeEin Stapellesevorgang liefert den Wert, der von den Gleitkommabefehlen verwendet wird.
-
02 · Aufrufende FunktionEine BildschirmkoordinateDie Funktion für Ziegeltreffer übergibt
20 + 30 × tile_x. -
03 * DatenbytesDie numerischen KonstantenReferenzierte Bytes dekodieren zu
1.5625,500.0und einen Skalenwert.
pan = (x × 1.5625 − 500.0) × scale
Fragen Sie nach dem Verhalten
Nach REA mit Ihrem Agenten verbinden und einrichten eines Tools zur Analyse von Maschinencode-Programmen, geben Sie die lokale ausführbare Datei und eine Frage an:
Welches Analysetool soll ich verwenden?
REA benötigt eines davon, um native Programme zu lesen:
- MODELL: Hopper (macOS oder Linux): Das Setup von REA erkennt es oder bietet an, es zu installieren. Öffnen Sie macOS auf Hopper einmal und wählen Sie den Demo-Modus oder aktivieren Sie eine Lizenz vor Ihrer ersten Analyse.
- MODELL: Ghidra (macOS oder Linux; experimentell auf Windows): kostenlos, benötigt jedoch ein vorhandenes Ghidra 12.1.x-Installation und ein 64-Bit-JDK 21 oder neuer.
- MODELL: IDA (Windows ): für ein vorhandenes IDA-Setup mit einer MCP-Registrierung.
Sehen Analyse von Maschinencode-Programmen einrichten für die Stufen.
Verwenden Sie REA, um herauszufinden, wie DX-Ball die Stereoklangpositionierung berechnet. Erklären Sie die Berechnung und zeigen Sie den Code.
Beispiel Eingabeaufforderung. Geben Sie Ihrem Agenten den Pfad zu Ihrer lokalen ausführbaren Datei DX-Ball 1.07. REA enthält DX-Ball nicht. Verwenden Sie also Ihre eigene Kopie oder stellen Sie die gleiche Frage zu einem anderen kleinen Windows-Programm, das Sie haben.
Wie erhalte ich den vollständigen Pfad einer Datei?
- MODELL: Windows : klicken Sie im Datei-Explorer mit der rechten Maustaste auf die Datei und wählen Sie Als Pfad kopieren. Halten Sie bei Windows 10 die Umschalttaste gedrückt, während Sie mit der rechten Maustaste klicken.
- MODELL: macOS : klicken Sie im Finder mit der rechten Maustaste auf die Datei, halten Sie die Option gedrückt und wählen Sie Kopiere "..." als Pfadnamen.
- Jedes System: ziehen Sie die Datei in ein Terminalfenster und ihr Pfad wird angezeigt.
Lesen Sie die REA-Ergebnisse
Lesen Sie die Eingabe
MOV EAX, dword ptr [EBP + 0x8]
MOV dword ptr [EBP + -0xc], EAX
FILD dword ptr [EBP + -0xc]
Die Anweisungen laden ein ganzzahliges Argument und konvertieren es für Gleitkomma-Arithmetik. Dies ist die Eingabe, die in der ersten Pseudocode-Ansicht fehlt.
Die aufrufende Funktion verfolgen
ADD EAX, 0x14
PUSH EAX
CALL 0x00406400
REA findet die aufrufende Funktion für Ziegeltreffer. Vor dem Aufruf multipliziert sie die Gitterkoordinate mit 30 und addiert 0x14 (20). So ergibt sich die Bildschirmposition des Ziegels.
Lesen Sie die referenzierten Konstanten
0x420068 000000000000f93f → 1.5625
0x420070 0000000000407f40 → 500.0
0x4210a0 000000000000f03f → 1.0
Die Arithmetik referenziert diese Adressen. Das Lesen der Bytes liefert die tatsächlichen Werte; Die Befehlsreihenfolge teilt dem Agenten mit, wie sie verwendet werden.
Schreiben und überprüfen Sie die wiederhergestellte Funktion
pan = (double)x;
pan = pan * 1.5625;
pan = pan - 500.0;
pan = pan * dxball_pan_scale;
return (DxBallInt)pan;
Bei einem Maßstab von 1,0 werden die Bildschirmpositionen 0, 320 und 640 vor der Ganzzahlumwandlung auf -500, 0 und 500 abgebildet. Bei der Berechnung wird die Bildschirmmitte in die Mitte des Stereofelds gesetzt.
Der Agent verwendete die Ergebnisse von REA, um das C zu schreiben. Separate Überprüfungen verglichen 3.205 Eingaben mit der ursprünglichen x86-Funktion und reproduzierten alle 63 kompilierten Bytes der vollständigen Funktion.
Sehen Sie sich die vollständige Untersuchung und den Assembly-to-C-Vergleich an
Probieren Sie es mit Ihrer eigenen Binärdatei aus
Verbinden Sie eine Analyse von Maschinencode-Programmen Anbieter, dann geben Sie Ihrem Agenten eine lokale ausführbare Datei oder Bibliothek und eine zu untersuchende Funktion. Nützliche Startfragen sind unter anderem “Wie wird diese Datei analysiert?" oder "Welche Funktion behandelt diese Menüaktion?”
Wenn Sie bereits einen Funktionsnamen oder eine Adresse kennen, können Sie diese vom Terminal abfragen. Für eine konfigurierte Ghidra-Installation:
npx -y rea-agents@latest function /absolute/path/to/program main \
--provider ghidra --json
Ersetzen Sie den Zielpfad und main mit Ihrem eigenen Funktionsnamen oder Ihrer eigenen Adresse. Jeder CLI-Aufruf importiert und analysiert die Binärdatei und schließt dann ihre Sitzung. Die MCP-Abfragen Ihres Agenten verwenden die importierte Binärdatei wieder, während diese Sitzung geöffnet ist.
Lesen Sie den Pseudocode zusammen mit Anweisungen und Referenzen. Wenn ein Ergebnis einen Anruf oder Wert ungelöst lässt, verwenden Sie diesen Ort als nächste Frage.