Calcular el posicionamiento del sonido estéreo izquierdo/derecho
En DX-Ball, un golpe de ladrillo proporciona una posición horizontal de la pantalla. El código de sonido lo convierte en un valor de panorámica izquierda / derecha.
La función de inicio, 0x00406400, tiene un resultado corto del descompilador: una llamada a __ftol(). REA también devuelve sus instrucciones y llamadas, que le dan al agente una forma de investigar la aritmética faltante.
¿Eres nuevo en estos términos?
-
Instrucciones: los pasos que ejecuta el procesador, que se muestran en forma legible, como
MOVoADD. - Resultado del descompilador / pseudocódigo: el intento de una herramienta de análisis de volver a convertir las instrucciones en código tipo C. Puede perder partes, como en este ejemplo.
- Llamador: una función que llama a esta. Muestra qué valores se pasan.
-
Dirección: una ubicación en el programa, escrita en hexadecimal, como
0x00406400. - Constantes: números fijos almacenados en el programa, leídos como bytes sin procesar y decodificados.
Tres pruebas, un cálculo
- 01 * InstruccionesUna entrada enteraUna lectura de pila proporciona el valor utilizado por las instrucciones de coma flotante.
-
02 * LlamadorUna coordenada de pantallaEl llamador golpeado por un ladrillo pasa
20 + 30 × tile_x. -
03 * Bytes de datosLas constantes numéricasDecodificación de bytes referenciados a
1.5625,500.0y un valor de escala.
pan = (x × 1.5625 − 500.0) × scale
Pregunte sobre el comportamiento
Después conectando REA a su agente y configuración de una herramienta de análisis de programas de código máquina, proporcione el ejecutable local y una pregunta:
¿Qué herramienta de análisis debo usar?
REA necesita uno de estos para leer programas nativos:
- Hopper ( macOS o Linux): La configuración de REA lo detecta u ofrece instalarlo. En macOS , abra Hopper una vez y elija el modo de demostración o active una licencia antes de su primer análisis.
- Ghidra ( macOS o Linux; experimental en Windows): gratis, pero necesita un Ghidra 12.1 existente.x instalación y un JDK 21 de 64 bits o más reciente.
- IDA ( Windows ): para una configuración IDA existente con un registro MCP.
Véase Configurar el análisis de programas de código máquina para los pasos.
Use REA para averiguar cómo DX-Ball calcula el posicionamiento del sonido estéreo. Explique el cálculo y muestre el código.
Mensaje de ejemplo. Proporcione a su agente la ruta al ejecutable local de DX-Ball 1.07. REA no incluye DX-Ball, así que use su propia copia o haga el mismo tipo de pregunta sobre otro pequeño programa Windows que tenga.
¿Cómo obtengo la ruta completa de un archivo?
- Windows : en el Explorador de archivos, haga clic con el botón derecho en el archivo y elija Copiar como ruta. En Windows 10, mantenga presionada la tecla Mayús mientras hace clic con el botón derecho.
- macOS : en Finder, haga clic con el botón derecho en el archivo, mantenga presionada la opción y elija Copie """ como nombre de ruta.
- Cualquier sistema: arrastre el archivo a una ventana de terminal y aparecerá su ruta.
Lea los resultados del REA
Lea la entrada
MOV EAX, dword ptr [EBP + 0x8]
MOV dword ptr [EBP + -0xc], EAX
FILD dword ptr [EBP + -0xc]
Las instrucciones cargan un argumento entero y lo convierten para aritmética de coma flotante. Esta es la entrada ausente en la primera vista de pseudocódigo.
Siga a la persona que llama
ADD EAX, 0x14
PUSH EAX
CALL 0x00406400
REA identifica a la persona que llama al golpe de ladrillo. Sus instrucciones anteriores multiplican la coordenada del mosaico por 30; sumando 0x14 (20) da la posición de la pantalla del ladrillo.
Lee las constantes a las que se hace referencia
0x420068 000000000000f93f → 1.5625
0x420070 0000000000407f40 → 500.0
0x4210a0 000000000000f03f → 1.0
La aritmética hace referencia a estas direcciones. La lectura de los bytes proporciona los valores reales; el orden de instrucción le dice al agente cómo se usan.
Escriba y verifique la función recuperada
pan = (double)x;
pan = pan * 1.5625;
pan = pan - 500.0;
pan = pan * dxball_pan_scale;
return (DxBallInt)pan;
Con una escala de 1.0, las posiciones de pantalla 0, 320 y 640 se asignan a -500, 0 y 500 antes de la conversión de enteros. El cálculo coloca el centro de la pantalla en el centro del campo estéreo.
El agente utilizó los hallazgos de REA para escribir el C. Comprobaciones separadas compararon 3205 entradas con la función x86 original y reprodujeron los 63 bytes compilados de la función completa.
Vea la investigación completa y la comparación de assembly-to-C
Pruébalo con tu propio binario
Conecte un proveedor de análisis de programas de código máquina, luego proporcione a su agente un ejecutable o biblioteca local y una función para investigar . Las preguntas iniciales útiles incluyen "¿ Cómo se analiza este archivo?"o" ¿Qué función maneja esta acción de menú?”
Si ya conoce el nombre o la dirección de una función, puede consultarla desde el terminal. Para una instalación Ghidra configurada:
npx -y rea-agents@latest function /absolute/path/to/program main \
--provider ghidra --json
Reemplace la ruta de destino y main con su propio nombre de función o dirección. Cada invocación CLI importa y analiza el binario, luego cierra su sesión. Las consultas MCP de su agente reutilizan el binario importado mientras esa sesión está abierta.
Lea el pseudocódigo junto con las instrucciones y referencias. Cuando un resultado deja una llamada o un valor sin resolver, use esa ubicación como la siguiente pregunta.