Nativo / Caso práctico interactivo / 20 min de lectura

DX-Ball: ¿puedes oír a qué lado está el ladrillo?

Usa REA para investigar la función de panorama estéreo de DX-Ball. Sigue las instrucciones y constantes, prueba una demostración sonora y verifica el cálculo recuperado.

En esta página

01. Probar antes de desmontar

Pulsa Izquierda y después Reproducir un tono breve. Repite a la derecha. Ahora ajusta la escala a −1: la posición permanece igual y el sonido cambia de lado. Una escala de 0 lo centra. El número de arriba es el cálculo recuperado; el audio de abajo es una ilustración.

El experimento estéreoJUGAR / OBSERVAR / EXPLICAR
X EN PANTALLA 320PANORAMA ENTERO 0
I
D

trunc((320 × 1.5625 − 500) × 1) = 0

Usa auriculares para oír la posición. El sonido solo comienza al pulsar Reproducir.

La regla numérica sigue el informe. El sonido es una ilustración normalizada con Web Audio, no el motor de audio original.

Qué vas a construir

Una función que convierte la posición en panorama estéreo, una ilustración audible y un plan para comparar una reconstrucción con el código máquina original.

Antes de la investigación

Los auriculares ayudan en el laboratorio. Para seguir la investigación del binario, necesitas tu propio ejecutable en inglés de DX-Ball 1.07 y un proveedor de análisis nativo. El informe proporciona el resumen criptográfico del objetivo y las pruebas registradas. Configurar REA →

02. Seguir el impacto del ladrillo hasta la llamada de sonido

Empieza por un evento visible: un ladrillo se rompe en un lado de la pantalla. Retrocede desde la llamada de sonido e identifica qué valor pasa quien la invoca. Un número que parece una coordenada podría ser un índice de casilla, un desplazamiento o una posición escalada.

Comprueba la identidad exacta de la versión en el informe original antes de reutilizar sus direcciones. La función auxiliar documentada empieza en 0x406400. Si tu ejecutable difiere, localiza el comportamiento correspondiente en vez de suponer que funciona la misma dirección.

Copiar esta instrucción de investigación
Inspecciona con REA mi ejecutable de DX-Ball 1.07 que coincide con la versión documentada. Empieza por la función auxiliar de panorama identificada en el informe oficial e inspecciona quien la invoca al golpear un ladrillo. Explica cómo construye el argumento. Cita tanto las instrucciones del punto de llamada como la carga de entrada de la función auxiliar. No supongas que la firma del descompilador está completa.

03. Si el pseudocódigo pierde el argumento, leer las instrucciones

Un descompilador puede generar un cuerpo breve y poco útil aunque estén disponibles las instrucciones máquina. Inspecciona conjuntamente la carga desde la pila, las operaciones de coma flotante, los datos referenciados y la conversión a entero. Pide los bytes originales de cada constante, incluido su tipo y orden de bytes.

El cálculo documentado es trunc((x × 1.5625 − 500) × scale). Quien llama proporciona la posición horizontal. Observa la conversión final: el truncamiento hacia cero importa para los valores negativos y difiere del redondeo hacia abajo.

  • ¿Por dónde entra el valor de entrada en la función?
  • ¿Qué bytes referenciados se decodifican como cada constante de coma flotante?
  • ¿Es scale un parámetro, un estado almacenado o un literal fijo?
  • ¿La conversión trunca, redondea, satura o desborda en el intervalo de entradas probado?

04. Convertir el número en sonido con cuidado

Implementa primero la función numérica y comprueba izquierda, centro y derecha. Añade después posiciones cercanas que produzcan una fracción. Con x = 319 y scale = 1, el valor bruto es −1.5625 y el resultado entero es −1. Redondear hacia abajo produciría incorrectamente −2.

Nuestro botón de sonido envía pan / 500 a un panoramizador estéreo de Web Audio y limita esa previsualización a −1…1. Así resulta fácil oír la dirección; no reproduce la curva de volumen de DirectSound ni el audio original del juego. El entero mostrado no se limita.

Copiar esta instrucción de investigación
Implementa de forma independiente el cálculo documentado de posición a panorama. Prueba x = 0, 1, 319, 320, 321 y 640 con escalas 0, 0.5, 1, 20 y −1. Conserva la conversión hacia cero. Crea una previsualización de tono activada por el usuario, indica su normalización por separado y nunca uses su recorte como comportamiento numérico recuperado.

05. Entender qué demuestran 3205 comprobaciones superadas

El proyecto documenta la comparación de 641 posiciones enteras con cinco ajustes de escala frente a la función x86 original. Por separado, documenta una coincidencia de 63 bytes del compilador en el entorno histórico especificado. Son dos comprobaciones diferentes: coincidencia de comportamiento para entradas seleccionadas y coincidencia del código máquina generado.

En tu propia investigación, conserva cada par de entradas y ambas salidas. Si aparece una diferencia, redúcela al caso mínimo que falle. Intenta una coincidencia de bytes solo cuando estén explícitos la versión del compilador, las opciones y el tratamiento de las reubicaciones. Nuestras pruebas JavaScript cubren la aritmética documentada; no repiten esa comparación con el binario original.

06. Comparar resultados conocidos

Úsalos como puntos de comprobación explícitos. Coincidir con ellos respalda esta pequeña regla; no demuestra compatibilidad con toda la aplicación.

X en pantalla / escalaPanorama enteroPor qué importa
0 / 1−500Borde izquierdo
319 / 1−1Truncamiento negativo
320 / 10Centro
321 / 11Truncamiento positivo
640 / −1−500Escala invertida
640 / 2010000El resultado numérico supera el intervalo de la previsualización de audio

Guarda ambos archivos en la misma carpeta. Ejecuta las comprobaciones con Node.js; no es necesario instalar paquetes.

Terminal
node check-case-labs.mjs

07. ¿Qué se verificó realmente?

Las 3205 comparaciones con x86 original y los 63 bytes coincidentes son resultados del proyecto original para una función. Este sitio prueba una implementación aritmética separada sobre la misma cuadrícula documentada de posición/escala, usando una referencia de números racionales. No ejecuta DXBALL.EXE, no reconstruye el juego completo ni reproduce su motor de audio.

Consultar los resultados numéricos de pruebas registrados por este sitio →

Fuentes: Informe de pruebas de DX-Ball de REA · Función de panorama mantenida en una versión fijada. Tutorial, ilustraciones y experimentos de navegador de autoría independiente.

Siguiente experimento¿Por qué 200 + 10% es igual a 220? →

¿Acabas de conocer la herramienta? ¿Qué es REA? · Cómo revisamos nuestras guías