Erreur d'obtention de l'émulateur
P粉447495069
2023-09-01 20:53:31
<p>J'ai essayé de procéder à l'ingénierie inverse d'un émulateur GBA (https://gba.44670.org/) que j'ai trouvé en ligne et j'ai utilisé un extracteur HTML pour essayer de le répliquer. Je voulais que cela fonctionne hors ligne, j'ai donc téléchargé tous les scripts sur mon ordinateur et je les ai exécutés là-bas. Cependant, après cela, le bouton "Sélectionner un fichier" n'apparaît plus, remplacé par la ligne de texte "Chargement, veuillez patienter...". En creusant plus profondément dans le code, j'ai découvert qu'il avait quelque chose à voir avec WASM. Le code est le suivant : </p>
<pre class="brush:php;toolbar:false;"><div id="wasm-loading">
Chargement, veuillez patienter...
</div>
<div id="select-rom" caché>
<type d'entrée="fichier" id="romFile" onchange="onFileSelected()" caché /></p>
<button onclick="$id('romFile').click()" id="btn-choose">Choisir un fichier...</button>
</div></pre>
<p>D'autres références à WASM dans le code se trouvent dans le fichier .js app.js : </p>
<pre class="brush:php;toolbar:false;">fonction wasmReady() {
romBuffer = Module._emuGetSymbol(1)
var ptr = Module._emuGetSymbol(2)
wasmSaveBuf = Module.HEAPU8.subarray(ptr, ptr + wasmSaveBufLen)
ptr = Module._emuGetSymbol(3)
imgFrameBuffer = new Uint8ClampedArray(Module.HEAPU8.buffer).subarray(ptr, ptr + 240 * 160 * 4)
idata = nouveau ImageData (imgFrameBuffer, 240, 160)
isWasmReady = vrai
document.getElementById('wasm-loading').hidden = true
document.getElementById('select-rom').hidden = false
}</pré>
<p>Je m'attendais à ce qu'une fois le script téléchargé, il fonctionne comme d'habitude. Je veux dire, il a toujours accès aux scripts dont il a besoin, n'est-ce pas ? J'ai essayé de masquer le texte en modifiant les instructions vrai/faux dans <code>document.getElementById('select-rom').hidden = false</code> et vice versa, mais rien ne semble fonctionner. Des idées? Merci d'avance. </p>
<p>(BTW, je recherche le chemin du fichier dans vscode.dev. Il ressemble à ceci : <code><script src="/Scripts/44gba.js"></script> < ;script src="/Scripts /app.js"></script> <script src="/Scripts/localforage.js"></script> .js></script></code>
)</p>
Pour utiliser un script afin de garder votre application locale, rappelez-vous deux choses :
C'est-à-dire, copiez le même HTML que vous obtenez dans la réponse (https://gba.44670.org/ ), ce qui préservera la structure du fichier. Voici ce que j'ai obtenu (
index.html
) :Ensuite, vous pouvez voir le chemin du script où vous allez créer le fichier :
De plus, vous devrez télécharger le fichier WASM (651 Ko compressé, 7,7 Mo non compressé). Vous pouvez télécharger le package zip ici (vous pouvez le trouver dans l'onglet "Réseau" des outils de développement) : https://gba.44670.org/build/44gba.wasm
Enfin, téléchargez tous les fichiers nécessaires (vous pouvez également télécharger des icônes et des images si vous le souhaitez, mais ils ne sont pas obligatoires) :
Vous obtiendrez une structure comme celle-ci :
Maintenant, ce serait formidable si vous pouviez désactiver CORS depuis votre navigateur. Mais sinon, vous devez le servir depuis un serveur HTTP local. Une option consiste à installer le package NPM : https://www.npmjs.com/package/http-server et à exécuter
npm install --global http-server
. Après cela, accédez simplement au répertoire du projet dans le terminal et démarrez le serveur :Vous verrez le bon écran et chargerez la ROM, puis vous aurez terminé.
Éditeur : Résoudre les problèmes CORS locaux avec un simple hack
Comme je sais que vous utilisez maintenant ChromeOS et que techniquement vous ne savez pas comment le gérer avec Node, NPM et HTTP-Server, j'ai apporté quelques modifications pour vous et mis directement le contenu binaire WASM build/44gba.js et retour le contenu binaire sur la fonction readBinary pour contourner les problèmes CORS. Vous pouvez lancer directement index.html. Voici le lien vers le nouveau fichier
build/44gba.js
build/44gba.js
, remplacez simplement son contenu par le fichier suivant : https://sendeyo.com/en/b02f94b524 Tout va bien. Voici les changements :