44 votes

Qu'est-ce que l'exécution de code arbitraire (ACE) et comment affecte-t-elle le speedrunning ?

De nombreux records ont été établis dans The Legend of Zelda : Ocarina of Time au cours des deux dernières semaines environ. Beaucoup de ces records indiquent que "ACE" en est la raison. J'ai lu que "ACE" signifie "Arbitrary Code Execution" (exécution de code arbitraire), mais pourquoi ACE établit-il tout à coup des records incroyables ?

D'après un article que j'ai lu, ACE peut être décrit comme...

Cela signifie que le jeu peut être forcé à charger et à exécuter un fichier de sauvegarde comme s'il s'agissait de code de jeu - ainsi, l'utilisation d'un nom de fichier de sauvegarde qui est du code de jeu peut accéder à des parties du jeu laissées de côté lors de son développement et de ses tests.

Donc, dans une série d'entrées dans le jeu, vous pouvez utiliser un nom de fichier afin d'exécuter un code de développement restant ?

4 votes

Les commentaires ont été supprimés. Cette section n'est pas destinée à discuter de la validité des glitches dans les speedruns, ou de ce qui compte pour battre un jeu.

56voto

seedofc Points 78

L'exécution de code arbitraire (ACE) est une anomalie qui permet au joueur de faire sauter le pointeur d'instruction vers une section de la mémoire dans laquelle le joueur peut écrire (comme le nom du fichier, l'angle et la position de certains acteurs, les entrées de la manette, etc.) Lorsque le pointeur d'instruction entre dans cette section de la mémoire, il exécute cette portion de la mémoire en tant que code.

En d'autres termes, il permet au joueur d'écrire du "code" avec des entrées normales et de l'exécuter dans le jeu.

L'application la plus évidente du speedrunning consiste à écrire et à exécuter un code qui demande au jeu de lancer le générique de fin, comme on le voit dans le speedrun de OoT any%. mais ce n'est certainement pas le seul ; dans Ocarina of Time, 100 % sans exigence de source, ACE est utilisé pour donner à Link presque chaque élément . ACE n'est généralement autorisé que dans la catégorie any%, ce qui limite les applications autorisées par les règles.

Ocarina of Time n'est pas le seul jeu avec ACE. Par exemple, Super Mario World utilise également l'ACE dans ses any% speedrun, écriture de code utilisant les données de coordonnées des sprites pour lancer le générique de fin. (plus communément appelé "distorsion des crédits"). Il peut également être utilisé pour écrire et diriger un jeu entier .


Il ne faut pas confondre ce problème avec d'autres problèmes de manipulation de la mémoire. Par exemple, le jeu de Super Mario World Glitch des nuages abuse du fait que le timer "temps restant jusqu'au prochain cycle de combat" de Bowser et la coordonnée x du nuage partagent un registre, puisqu'ils n'étaient pas censés apparaître ensemble dans la même pièce. Comme le pointeur d'instruction reste dans la plage normale, vous n'exécutez pas de code arbitraire ici, même si vous manipulez le comportement du jeu en abusant de cette mémoire partagée.

2 votes

L'ACE a également été découvert récemment dans le MM youtube.com/watch?v=xb9yijgukak

3 votes

L'application la plus connue de ce phénomène est le problème de Missingno dans Pokemon Red, qui permet de dupliquer le 6e objet de votre sac en effectuant une série d'actions spécifiques.

19voto

druss Points 131

Je ne suis pas sûr à 100% du fonctionnement interne des différents assembleurs et processeurs, mais j'essaie d'expliquer du mieux que je peux ce que je comprends.

Disons que les instructions de la machine pour effectuer une transition de carte / warp est une certaine valeur, par exemple AC .
Disons que cette instruction prend une valeur pour décider de l'endroit où le joueur doit se déplacer. Par exemple, la salle du boss final a une valeur C8 .

Donc si vous dites à votre jeu d'appeler la routine pour exécuter AC C8 il sait qu'il doit téléporter le joueur vers le boss final.

Maintenant, supposons que vous ayez un mécanisme d'inventaire qui enregistre les objets par leur id. Une bombe a pour id C8 et un bâton a id AC .
Supposons que les données de l'inventaire soient disposées de manière séquentielle, de sorte que le fait d'avoir d'abord un bâton, puis une bombe, soit représenté comme suit AC C8 également.

Maintenant, "tout ce que vous avez à faire" est de tromper le programme en le faisant sauter à un mauvais endroit alors qu'il essaie d'exécuter une action quelconque. Ceci est généralement fait par le "compteur de programme" qui pointe vers l'adresse de l'instruction à exécuter.

Si vous parvenez à manipuler le compteur du programme pour qu'il pointe vers le début de votre inventaire au lieu de l'adresse à laquelle il se trouve normalement devrait le programme va maintenant lire les données de votre inventaire, mais le traite comme un code exécutable à la place . Donc, puisque votre inventaire contient "bâton, bombe", les données qui seront lues sont les suivantes AC C8 ce qui fait que le programme vous emmène dans la salle du patron.

Je pense que ce genre de chose est généralement obtenu en corrompant des parties de la mémoire ou quelque chose de similaire. La section de la mémoire qui est corrompue contient maintenant des données "absurdes", mais peut toujours être exécutée.

Je dirais qu'un bon exemple de la façon dont tout cela peut être exploité est montré ici : Comment battre Pokemon Jaune en 0:00

1 votes

C'était une bonne explication. Une chose à noter est que les exploits de débordement de tampon sont connus pour causer l'exécution de code arbitraire.

2 votes

Je pense que cette réponse est brillante - une personne qui n'est pas du tout familière avec la programmation pourrait la comprendre complètement. Vous pourriez développer ce qu'est le "compteur de programmes" pour améliorer encore la réponse.

0 votes

Je pense que le glitch de SRM ACE (dans OoT) fonctionne en faisant en sorte que le jeu écrase accidentellement l'emplacement d'un code (stocké dans la RAM), avec un emplacement arbitraire que vous pouvez sélectionner. Ensuite, quand il veut exécuter ce code, il exécute le mauvais code par erreur, et le code qu'il exécute est le code que vous avez configuré plus tôt.

AlleGamers.com

AlleGamers est une communauté de gamers qui cherche à élargir la connaissance des jeux vidéo.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X