取得模擬器錯誤
P粉447495069
2023-09-01 20:53:31
<p>我一直在嘗試對我在網上找到的 GBA 模擬器 (https://gba.44670.org/) 進行逆向工程,並使用 HTML 提取器來嘗試複製它。我希望它能夠離線工作,所以我將所有腳本下載到我的電腦上,並在那裡運行。但是,此後,「選擇檔案」按鈕不再出現,取而代之的是「正在加載,請稍候...」文字行。深入研究程式碼,我發現它與 WASM 有關。代碼如下:</p>
<pre class="brush:php;toolbar:false;"><div id="wasm-loading">
Loading, please wait...
</div>
<div id="select-rom" hidden>
<input type="file" id="romFile" onchange="onFileSelected()" hidden /></p>
<button onclick="$id('romFile').click()" id="btn-choose">Choose File...</button>
</div></pre>
<p>程式碼中對 WASM 的其他提及位於 .js 檔案 app.js 中:</p>
<pre class="brush:php;toolbar:false;">function 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 = new ImageData(imgFrameBuffer, 240, 160)
isWasmReady = true
document.getElementById('wasm-loading').hidden = true
document.getElementById('select-rom').hidden = false
}</pre>
<p>我期望一旦我下載了腳本,它就會像平常一樣工作。我的意思是,它仍然可以訪問它需要的腳本,對吧?我嘗試透過更改 <code>document.getElementById('select-rom').hidden = false</code> 中的 true/false 語句來隱藏文本,反之亦然,但似乎沒有任何效果。有任何想法嗎?提前致謝。 </p>
<p>(順便說一句,我正在vscode.dev 中尋找檔案路徑。它看起來像這樣: <code><script src="/Scripts/44gba.js"></script> < ;script src="/Scripts /app.js"></script> <script src="/Scripts/localforage.js"></script> <script src=/Scripts/pako.min .js></script></code>
)</p>
要使用腳本將應用程式保留在本地,請記住兩件事:
也就是說,複製您在回應中得到的相同 HTML (https://gba.44670.org/ ),這將保留檔案結構。這是我得到的內容(
index.html
):然後您可以看到腳本路徑,您將按照該路徑建立檔案:
此外,您還需要下載 WASM 檔案(壓縮後 651KB,未壓縮 7.7MB)。您可以在此處下載壓縮包(您可以在開發工具的「網路」標籤中找到它):https ://gba.44670.org/build/44gba.wasm
#最後,下載所有必要的檔案(如果需要,也可以下載圖示和圖片,但不是必要的):
#您將得到如下所示的結構:
現在,如果您可以從瀏覽器停用 CORS,那就太好了。但如果沒有,您必須從本機 HTTP 伺服器提供服務。一種選擇是安裝 NPM 套件: https://www.npmjs.com/package/http-伺服器,執行
npm install --global http-server
。之後,只需導航到終端中的專案目錄並啟動伺服器:您將看到正確的螢幕並加載 ROM,然後就完成了。
編輯:透過簡單的 Hack 解決本地 CORS 問題
#由於我知道您現在使用的是ChromeOS,而且從技術上講還不知道如何使用Node、NPM 和HTTP-Server 來處理它,因此我為您做了一些修改,並將WASM 二進位內容直接放入build/44gba.js,並在函數readBinary 上傳回該二進位內容,以便繞過CORS 問題。您可以直接啟動index.html。以下是新
build/44gba.js
文件的鏈接,只需將其內容替換為以下文件:https://sendeyo.com/en/b02f94b524,你們都很好。以下是更改內容: