Recover DX-Ball
obliczanie lewej / prawej pozycji dźwięku.

Sprawdź oryginalne instrukcje, zidentyfikuj dane wejściowe i stałe, a następnie sprawdź odzyskane C.

Oblicz pozycjonowanie dźwięku stereo w lewo / w prawo

W DX-Ball uderzenie Cegły zapewnia poziomą pozycję ekranu. Kod dźwiękowy zamienia go w wartość panoramowania w lewo/w prawo.

Funkcja startowa, 0x00406400, ma krótki wynik dekompilatora: wezwanie do __ftol(). REA zwraca również swoje instrukcje i dzwoniące, które dają agentowi sposób na zbadanie brakującej arytmetyki.

Nowy w tych warunkach?
  • Instrukcje: kroki, które uruchamia procesor, pokazane w czytelnej formie, takie jak MOV lub ADD.
  • Wynik dekompilatora / pseudokod: próba narzędzia analitycznego przekształcenia instrukcji z powrotem w kod podobny do C. Może przegapić części, jak w tym przykładzie.
  • Dzwoniący: funkcja, która nazywa ten. Pokazuje, które wartości są przekazywane.
  • Adres: miejsce w programie, napisane w systemie szesnastkowym, takie jak 0x00406400.
  • Stałe: stałe numery przechowywane w programie, odczytywane jako surowe bajty i dekodowane.

Trzy dowody, jedna kalkulacja

  1. 01 * instrukcjeWejście całkowiteOdczyt stosu dostarcza wartość używaną przez instrukcje zmiennoprzecinkowe.
  2. 02 * dzwoniącyWspółrzędna ekranuThe brick-hit caller passes 20 + 30 × tile_x.
  3. 03 * bajty danychStałe numeryczneOdsyłane bajty dekodują do 1.5625, 500.0 i wartość skali.

pan = (x × 1.5625 − 500.0) × scale

REA dostarcza instrukcje, relacji funkcja-wywołanie i bajtów. Agent interpretuje je razem.

Zapytaj o zachowanie

Po łączenie REA z agentem oraz konfigurowanie narzędzia do analizy programów kodu maszynowego, podaj lokalny plik wykonywalny i pytanie:

Jakiego narzędzia analitycznego powinienem użyć?

REA potrzebuje jednego z nich do odczytu programów natywnych:

  • Hopper (macOS lub Linux ): konfiguracja REA wykrywa ją lub oferuje jej instalację. Na macOS otwórz Hopper raz i wybierz tryb demo lub Aktywuj licencję przed pierwszą analizą.
  • Ghidra (macOS lub Linux ; eksperymentalny na Windows): wolny, ale potrzebuje istniejącego Ghidra 12.1.instalacja x i 64-bitowy JDK 21 lub nowszy.
  • IDA (Windows): dla istniejącej konfiguracji IDA z rejestracją MCP.

Zobacz też Skonfiguruj analizę programów kodu maszynowego do kroków.

Twój agent kodowania

Użyj REA, aby dowiedzieć się, jak DX-Ball oblicza pozycjonowanie dźwięku stereo. Wyjaśnij obliczenia i pokaż kod.

Przykładowy monit. Podaj swojemu agentowi ścieżkę do lokalnego pliku wykonywalnego DX-Ball 1.07. REA nie zawiera DX-Ball, więc użyj własnej kopii lub zadaj to samo pytanie dotyczące innego małego programu Windows, który masz.

Jak uzyskać pełną ścieżkę pliku?
  • Windows : w Eksploratorze plików kliknij plik prawym przyciskiem myszy i wybierz Kopiuj jako ścieżkę. Na Windows 10 przytrzymaj klawisz Shift, klikając prawym przyciskiem myszy.
  • macOS : w Finderze kliknij prawym przyciskiem myszy plik, przytrzymaj opcję i wybierz Skopiuj " ... " jako ścieżkę.
  • Dowolny system: przeciągnij plik do okna terminala, a pojawi się jego ścieżka.

Przeczytaj wyniki REA

Przeczytaj dane wejściowe

REA Instrukcja fragment * 0x406409
MOV EAX, dword ptr [EBP + 0x8]
MOV dword ptr [EBP + -0xc], EAX
FILD dword ptr [EBP + -0xc]

Instrukcje ładują argument liczby całkowitej i konwertują go na arytmetykę zmiennoprzecinkową. Jest to dane wejściowe nieobecne w pierwszym widoku pseudokodu.

Podążaj za dzwoniącym

REA fragment dzwoniącego * 0x411f5b
ADD EAX, 0x14
PUSH EAX
CALL 0x00406400

REA identyfikuje dzwoniącego z cegły. Jego wcześniejsze instrukcje mnożą współrzędną płytki przez 30; dodawanie 0x14 (20) podaje położenie ekranu Cegły.

Przeczytaj przywoływane stałe

Wyniki bajtów REA * interpretowane jako podwaja się little-endian
0x420068  000000000000f93f  → 1.5625
0x420070  0000000000407f40  → 500.0
0x4210a0  000000000000f03f  → 1.0

Arytmetyka odwołuje się do tych adresów. Odczyt bajtów dostarcza rzeczywistych wartości; kolejność instrukcji informuje agenta, w jaki sposób są używane.

Napisz i sprawdź odzyskaną funkcję

Odzyskany fragment C ·
pan = (double)x;
pan = pan * 1.5625;
pan = pan - 500.0;
pan = pan * dxball_pan_scale;
return (DxBallInt)pan;

W skali 1,0 pozycje ekranu 0, 320 i 640 są mapowane do -500, 0 i 500 przed konwersją liczb całkowitych. Obliczenia umieszczają środek ekranu na środku pola stereo.

Agent wykorzystał wyniki REA do zapisania C. oddzielne kontrole porównały 3205 wejść z oryginalną funkcją x86 i odtworzyły wszystkie 63 skompilowane bajty pełnej funkcji.

Zobacz pełne porównanie badań i montażu do C

Spróbuj z własnym binarnym

Połącz analizę dostawcy programów kodu maszynowego, następnie daj agentowi lokalny plik wykonywalny lub bibliotekę oraz funkcję do zbadania. Przydatne pytania początkowe obejmują "Jak jest analizowany ten plik?"lub" która funkcja obsługuje tę akcję menu?”

Jeśli znasz już nazwę lub adres funkcji, możesz wysłać zapytanie z terminala. Dla skonfigurowanej instalacji Ghidra:

Analiza funkcji
npx -y rea-agents@latest function /absolute/path/to/program main \
  --provider ghidra --json

Zastąp ścieżkę docelową i main z własną nazwą lub adresem funkcji. Każde wywołanie CLI importuje i analizuje plik binarny, a następnie zamyka jego sesję. Zapytania MCP twojego agenta ponownie wykorzystują zaimportowany plik binarny, gdy ta sesja jest otwarta.

Przeczytaj pseudokod wraz z instrukcjami i odniesieniami. Gdy wynik pozostawia nierozwiązane wywołanie lub wartość, użyj tej lokalizacji jako następnego pytania.

Top