Natif / Étude de cas interactive / 20 min de lecture

DX-Ball : entendez-vous de quel côté se trouve la brique ?

Analysez la fonction de panoramique stéréo de DX-Ball avec REA. Suivez instructions et constantes, essayez une démo sonore et testez le calcul retrouvé.

Sur cette page

01. Essayez avant de décortiquer

Appuyez sur Gauche, puis Écouter un bref son. Recommencez à droite. Réglez ensuite le facteur sur −1 : la position reste fixe, mais le son change de côté. Le facteur 0 le centre. Le nombre ci-dessus est le calcul retrouvé ; le son ci-dessous est une illustration.

L’expérience stéréoJOUER / OBSERVER / EXPLIQUER
X À L’ÉCRAN 320PANORAMIQUE ENTIER 0
G
D

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

Utilisez un casque pour entendre la position. Le son ne démarre que lorsque vous appuyez sur Écouter.

La règle numérique suit le rapport. Le son est une illustration normalisée avec Web Audio, pas le moteur audio d’origine.

Ce que vous construirez

Une fonction convertissant la position en panoramique, une illustration sonore et un plan de comparaison entre reconstruction et code machine original.

Avant l’investigation

Un casque aide à utiliser l’expérience. Pour suivre l’analyse binaire, il vous faut votre propre exécutable anglais DX-Ball 1.07 et un moteur d’analyse native. Le rapport fournit l’empreinte de la cible et les éléments enregistrés. Configurer REA →

02. Suivez l’impact sur la brique jusqu’à l’appel audio

Partez d’un événement visible : une brique se casse d’un côté de l’écran. Remontez depuis l’appel audio et identifiez la valeur transmise par l’appelant. Un nombre ressemblant à une coordonnée pourrait être un indice de case, un décalage ou une position mise à l’échelle.

Vérifiez l’identité exacte de la version indiquée dans le rapport du projet avant de réutiliser ses adresses. La fonction étudiée y commence à 0x406400. Si votre exécutable diffère, recherchez le comportement correspondant au lieu de supposer que la même adresse convient.

Consigne d’investigation à copier
Inspecte mon exécutable DX-Ball 1.07 correspondant avec REA. Pars de la fonction de panoramique identifiée dans le rapport officiel et inspecte son appelant lors d’un impact sur une brique. Explique comment l’appelant construit l’argument. Cite les instructions du site d’appel et le chargement de l’entrée dans la fonction. Ne suppose pas que la signature produite par le décompilateur est complète.

03. Quand le pseudocode perd l’argument, lisez les instructions

Un décompilateur peut produire un corps de fonction court et peu utile alors que les instructions machine sont disponibles. Examinez ensemble le chargement depuis la pile, les opérations en virgule flottante, les données référencées et la conversion en entier. Demandez les octets d’origine de chaque constante, avec leur type et leur ordre.

Le calcul documenté est trunc((x × 1.5625 − 500) × scale). L’appelant fournit la position horizontale. Notez la conversion finale : la troncature vers zéro compte pour les valeurs négatives et diffère d’un arrondi vers le bas.

  • Où l’entrée arrive-t-elle dans la fonction ?
  • Quels octets référencés correspondent à chaque constante en virgule flottante ?
  • Le facteur scale est-il un paramètre, un état enregistré ou une constante littérale ?
  • La conversion tronque-t-elle, arrondit-elle, sature-t-elle ou déborde-t-elle sur la plage d’entrées testée ?

04. Faites entendre le résultat, avec précaution

Implémentez d’abord la fonction numérique et vérifiez la gauche, le centre et la droite. Ajoutez ensuite des positions proches produisant une fraction. À x = 319 et scale = 1, la valeur brute est −1.5625 et l’entier obtenu est −1. L’opération floor donnerait à tort −2.

Notre bouton audio convertit pan / 500 en panoramique stéréo Web Audio et limite cet aperçu à −1…1. La direction s’entend facilement ; cela ne reproduit ni la courbe de volume de DirectSound ni le son du jeu d’origine. L’entier affiché n’est pas limité.

Consigne d’investigation à copier
Implémente indépendamment le calcul documenté de position vers panoramique. Teste x = 0, 1, 319, 320, 321 et 640 avec les facteurs 0, 0.5, 1, 20 et −1. Préserve la conversion vers zéro. Ajoute un aperçu sonore déclenché par l’utilisateur, indique séparément sa normalisation et ne confonds jamais la limitation de cet aperçu avec le comportement numérique retrouvé.

05. Comprenez ce que prouvent 3 205 vérifications réussies

Le projet indique avoir comparé 641 positions entières avec cinq facteurs à la fonction x86 d’origine. Il signale séparément une correspondance de 63 octets à la compilation dans l’environnement historique précisé. Il s’agit de deux vérifications distinctes : même comportement pour certaines entrées et même code machine généré.

Pour votre investigation, conservez chaque paire d’entrées et les deux sorties. En cas d’écart, réduisez-le au plus petit cas qui échoue. Ne cherchez une correspondance octet par octet qu’une fois la version du compilateur, ses options et le traitement des relocalisations explicités. Nos tests JavaScript couvrent le calcul documenté ; ils ne répètent pas cette comparaison au binaire d’origine.

06. Comparez les résultats connus

Utilisez ces valeurs comme points de contrôle explicites. Les retrouver étaye cette petite règle, sans établir une compatibilité avec toute l’application.

X à l’écran / facteurPanoramique entierCe que cela vérifie
0 / 1−500Bord gauche
319 / 1−1Troncature négative
320 / 10Centre
321 / 11Troncature positive
640 / −1−500Facteur inversé
640 / 2010 000Le résultat numérique dépasse la plage de l’aperçu audio

Enregistrez les deux fichiers dans le même dossier. Exécutez les vérifications avec Node.js ; aucun paquet n’est à installer.

Terminal
node check-case-labs.mjs

07. Qu’est-ce qui a réellement été vérifié ?

Les 3 205 comparaisons avec le x86 d’origine et les 63 octets identiques sont des résultats du projet concernant une seule fonction. Ce site teste une implémentation arithmétique distincte sur la même grille documentée de positions et de facteurs, avec une référence en nombres rationnels. Il n’exécute pas DXBALL.EXE, ne reconstruit pas le jeu complet et ne reproduit pas son moteur audio.

Lire les résultats numériques enregistrés par ce site →

Sources : Rapport d’analyse DX-Ball de REA · Version figée de la fonction de panoramique maintenue. Tutoriel, illustrations et expériences dans le navigateur créés indépendamment.

Expérience suivantePourquoi 200 + 10% donne-t-il 220 ? →

Vous découvrez l’outil ? Qu’est-ce que REA ? · Comment nous vérifions nos guides