Recuperare di DX-Ball
calcolo della posizione sonora sinistra/destra.

Ispezionare le istruzioni originali, identificare l'input e le costanti, quindi controllare il C recuperato.

Calcola il posizionamento del suono stereo sinistro / destro

In DX-Ball, un mattone colpito fornisce una posizione dello schermo orizzontale. Il codice audio lo trasforma in un valore di panning sinistro/destro.

La funzione di partenza, 0x00406400, ha un risultato di decompiler corto: una chiamata a __ftol(). REA restituisce anche le sue istruzioni e i chiamanti, che danno all'agente un modo per indagare sull'aritmetica mancante.

Nuovo a questi termini?
  • Istruzione: i passaggi eseguiti dal processore, mostrati in forma leggibile come MOV o ADD.
  • Risultato decompilatore / pseudocodice: il tentativo di uno strumento di analisi di trasformare le istruzioni in codice simile a C. Può perdere parti, come in questo esempio.
  • Chiamante: una funzione che chiama questo. Mostra quali valori vengono passati.
  • Indirizzo: una posizione nel programma, scritta in esadecimale, come 0x00406400.
  • Costante: numeri fissi memorizzati nel programma, letti come byte grezzi e decodificati.

Tre prove, un calcolo

  1. 01 * IstruzioniUn input interoUna lettura dello stack fornisce il valore utilizzato dalle istruzioni in virgola mobile.
  2. 02 * ChiamanteUna coordinata dello schermoIl mattone-hit caller passa 20 + 30 × tile_x.
  3. 03 * Byte di datiLe costanti numericheI byte di riferimento decodificano a 1.5625, 500.0 e un valore di scala.

pan = (x × 1.5625 − 500.0) × scale

REA fornisce le istruzioni, la relazione funzione-chiamata e i byte. L'agente li interpreta insieme.

Chiedi del comportamento

Dopo collegamento di REA al tuo agente e impostazione di uno strumento di analisi dei programmi di codice macchina, fornisca l'eseguibile locale e una domanda:

Quale strumento di analisi dovrei usare?

REA ha bisogno di uno di questi per leggere i programmi nativi:

  • Hopper ( macOS o Linux): la configurazione di REA lo rileva o offre di installarlo. Su macOS, apri Hopper una volta e scegli la modalità demo o attiva una licenza prima della tua prima analisi.
  • Ghidra (macOS o Linux ; sperimentale su Windows): gratuito, ma richiede un Ghidra 12.1 esistente.x installazione e un 64-bit JDK 21 o più recente.
  • IDA ( Windows): per una configurazione IDA esistente con una registrazione MCP.

Vedere Impostare l'analisi dei programmi di codice macchina per i passi.

Il tuo agente di codifica

Utilizzare REA per scoprire come DX-Ball calcola il posizionamento del suono stereo. Spiega il calcolo e mostra il codice.

Esempio prompt. Fornisci al tuo agente il percorso dell'eseguibile DX-Ball 1.07 locale. REA non include DX-Ball, quindi usa la tua copia o fai lo stesso tipo di domanda su un altro piccolo programma Windows che hai.

Come ottengo il percorso completo di un file?
  • Windows : in Esplora file, fare clic con il pulsante destro del mouse sul file e scegliere Copia come percorso. Su Windows 10, tenere premuto Maiusc mentre si fa clic con il pulsante destro del mouse.
  • macOS : nel Finder, fare clic destro sul file, tenere premuto Opzione e scegliere Copia " ... " come percorso.
  • Qualsiasi sistema: trascinare il file in una finestra di terminale e il suo percorso appare.

Leggi i risultati di REA

Leggi l'input

Estratto di istruzioni REA * 0x406409
MOV EAX, dword ptr [EBP + 0x8]
MOV dword ptr [EBP + -0xc], EAX
FILD dword ptr [EBP + -0xc]

Le istruzioni caricano un argomento intero e lo convertono per l'aritmetica in virgola mobile. Questo è l'input assente dalla prima vista pseudocodice.

Segui il chiamante

REA chiamante estratto * 0x411f5b
ADD EAX, 0x14
PUSH EAX
CALL 0x00406400

REA identifica il chiamante brick-hit. Le sue istruzioni precedenti moltiplicano la coordinata tile per 30; aggiunta 0x14 (20) dà la posizione dello schermo del mattone.

Leggi le costanti di riferimento

Risultati byte REA * interpretati come doppi little-endian
0x420068  000000000000f93f  → 1.5625
0x420070  0000000000407f40  → 500.0
0x4210a0  000000000000f03f  → 1.0

L'aritmetica fa riferimento a questi indirizzi. La lettura dei byte fornisce i valori effettivi; l'ordine di istruzioni indica all'agente come vengono utilizzati.

Scrivi e controlla la funzione recuperata

Recuperato C * estratto
pan = (double)x;
pan = pan * 1.5625;
pan = pan - 500.0;
pan = pan * dxball_pan_scale;
return (DxBallInt)pan;

Con una scala di 1.0, le posizioni dello schermo 0, 320 e 640 mappano a -500, 0 e 500 prima della conversione intera. Il calcolo mette il centro dello schermo al centro del campo stereo.

L'agente ha utilizzato i risultati di REA per scrivere il C. Controlli separati hanno confrontato 3.205 input con la funzione x86 originale e riprodotto tutti i 63 byte compilati della funzione completa.

Vedi l'indagine completa e il confronto assembly-to-C

Provalo con il tuo binario

Collegare un'analisi del fornitore di programmi di codice macchina, poi dia al Suo agente un eseguibile locale o una biblioteca e una caratteristica per investigare. Domande di partenza utili includono " Come viene analizzato questo file?"o" Quale funzione gestisce questa azione del menu?”

Se si conosce già il nome o l'indirizzo di una funzione, è possibile interrogarlo dal terminale. Per un'installazione Ghidra configurata:

Analisi delle funzioni
npx -y rea-agents@latest function /absolute/path/to/program main \
  --provider ghidra --json

Sostituire il percorso di destinazione e main con il proprio nome o indirizzo della funzione. Ogni invocazione CLI importa e analizza il binario, quindi chiude la sua sessione. Le query MCP dell'agente riutilizzano il binario importato mentre la sessione è aperta.

Leggi lo pseudocodice insieme a istruzioni e riferimenti. Quando un risultato lascia una chiamata o un valore irrisolto, utilizzare tale posizione come domanda successiva.

Cima