Récupérez les DX-Ball
calcul de la position sonore gauche / droite.

Inspectez les instructions d'origine, identifiez l'entrée et les constantes, puis vérifiez le C récupéré.

Calculer le positionnement du son stéréo gauche/droite

Dans DX-Ball, un coup de brique fournit une position horizontale de l'écran. Le code sonore le transforme en une valeur panoramique gauche/droite.

La fonction de démarrage, 0x00406400, a un court résultat de décompilateur: un appel à __ftol(). REA renvoie également ses instructions et ses appelants, ce qui donne à l'agent un moyen d'enquêter sur l'arithmétique manquante.

Nouveau dans ces conditions?
  • Instructions: les étapes exécutées par le processeur, affichées sous une forme lisible telle que MOV ou ADD.
  • Résultat du décompilateur / pseudocode: la tentative d'un outil d'analyse de transformer les instructions en code de type C. Il peut manquer des parties, comme dans cet exemple.
  • Appelant: une fonction qui appelle celui-ci. Il montre quelles valeurs sont transmises.
  • Adresse: un emplacement dans le programme, écrit en hexadécimal, tel que 0x00406400.
  • Constantes: nombres fixes stockés dans le programme, lus sous forme d'octets bruts et décodés.

Trois éléments de preuve, un calcul

  1. 01 * Instructions d'utilisationUne entrée entièreUne lecture de pile fournit la valeur utilisée par les instructions à virgule flottante.
  2. 02 · AppelantUne coordonnée d'écranL'appelant frappé par la brique passe 20 + 30 × tile_x.
  3. 03 * Octets de donnéesLes constantes numériquesLes octets référencés décodent en 1.5625, 500.0 et une valeur d'échelle.

pan = (x × 1.5625 − 500.0) × scale

REA fournit les instructions, la relation fonction-appel et les octets. L'agent les interprète ensemble.

Renseignez-vous sur le comportement

Après connexion de REA à votre agent et mise en place d'un outil d'analyse des programmes en code machine, fournir l'exécutable local et une question:

Quel outil d'analyse dois-je utiliser?

REA a besoin de l'un d'entre eux pour lire des programmes natifs:

  • Hopper (macOS ou Linux): REAle programme d'installation le détecte ou propose de l'installer. Sur macOS, ouvert Hopper une fois et choisissez le mode démo ou activez une licence avant votre première analyse.
  • Ghidra (macOS ou Linux; expérimental sur Windows): gratuit, mais nécessite un existant Ghidra 12.1.installation x et un JDK 64 bits 21 ou plus récent.
  • IDA (Windows): pour un existant IDA configuration avec un MCP inscription.

Voir Mettre en place une analyse des programmes en code machine pour les étapes.

Votre agent de codage

Utilisez REA pour savoir comment DX-Ball calcule le positionnement du son stéréo. Expliquez le calcul et montrez le code.

Exemple d'invite. Donnez à votre agent le chemin d'accès à votre exécutable DX-Ball 1.07 local. REA n'inclut pas DX-Ball , alors utilisez votre propre copie ou posez le même genre de question à propos d'un autre petit programme Windows que vous avez.

Comment puis-je obtenir le chemin complet d'un fichier?
  • Windows: dans l'Explorateur de fichiers, cliquez avec le bouton droit sur le fichier et choisissez Copier comme chemin. Sur Windows 10, maintenez la touche Maj enfoncée tout en cliquant avec le bouton droit.
  • macOS: dans le Finder, cliquez avec le bouton droit sur le fichier, maintenez l'option enfoncée et choisissez Copiez " ... " comme chemin d'accès.
  • Tout système: faites glisser le fichier dans une fenêtre de terminal et son chemin apparaît.

Lire les résultats du REA

Lire l'entrée

Extrait d'instruction REA · 0x406409
MOV EAX, dword ptr [EBP + 0x8]
MOV dword ptr [EBP + -0xc], EAX
FILD dword ptr [EBP + -0xc]

Les instructions chargent un argument entier et le convertissent en arithmétique à virgule flottante. C'est l'entrée absente de la première vue pseudocode.

Suivez l'appelant

Extrait de l'appelant REA · 0x411f5b
ADD EAX, 0x14
PUSH EAX
CALL 0x00406400

REA identifie l'appelant touché par la brique. Ses instructions précédentes multiplient la coordonnée de la tuile par 30; en ajoutant 0x14 (20) donne la position de l'écran de la brique.

Lire les constantes référencées

Résultats d'octets REA * interprétés comme des doubles little-endian
0x420068  000000000000f93f  → 1.5625
0x420070  0000000000407f40  → 500.0
0x4210a0  000000000000f03f  → 1.0

L'arithmétique fait référence à ces adresses. La lecture des octets fournit les valeurs réelles; l'ordre des instructions indique à l'agent comment elles sont utilisées.

Écrivez et vérifiez la fonction récupérée

Extrait C · récupéré
pan = (double)x;
pan = pan * 1.5625;
pan = pan - 500.0;
pan = pan * dxball_pan_scale;
return (DxBallInt)pan;

Avec une échelle de 1,0, les positions d'écran 0, 320 et 640 correspondent à -500, 0 et 500 avant la conversion d'entiers. Le calcul place le centre de l'écran au centre du champ stéréo.

L'agent a utilisé les résultats de REA pour écrire le C. Des vérifications séparées ont comparé 3 205 entrées à la fonction x86 d'origine et reproduit les 63 octets compilés de la fonction complète.

Voir l'enquête complète et la comparaison assemblage-C

Essayez-le avec votre propre binaire

Connecter un fournisseur d'analyse de programmes en code machine, puis donnez à votre agent un exécutable ou une bibliothèque locale et une fonctionnalité à étudier. Les questions de départ utiles incluent “Comment ce fichier est-il analysé?“ou " Quelle fonction gère cette action de menu?”

Si vous connaissez déjà un nom ou une adresse de fonction, vous pouvez l'interroger à partir du terminal. Pour une installation Ghidra configurée:

Analyse de fonction
npx -y rea-agents@latest function /absolute/path/to/program main \
  --provider ghidra --json

Remplacer le chemin cible et main avec votre propre nom de fonction ou adresse. Chaque appel CLI importe et analyse le binaire, puis ferme sa session. Les requêtes MCP de votre agent réutilisent le binaire importé pendant que cette session est ouverte.

Lisez le pseudocode à côté des instructions et des références. Lorsqu'un résultat laisse un appel ou une valeur non résolu, utilisez cet emplacement comme question suivante.

Haut