webassembly - 是否可以从浏览器控制台运行一些 Wasm 代码?
问题描述
我正在阅读:https ://developer.mozilla.org/en-US/docs/WebAssembly/Loading_and_running ,他们建议先获取(如 xhr fetch).wasm
文件,然后运行它。
假设我有一小段 wasm 代码(就像这里转换成的这个.wasm
)作为字符串。如何将其粘贴到变量中并在浏览器控制台中运行?
解决方案
这是一个示例,使用以下 WASM 代码,导出单个wasm_add
函数:
(module
(type $t0 (func (param i32 i32) (result i32)))
(func $wasm_add (type $t0) (param $p0 i32) (param $p1 i32) (result i32)
get_local $p1
get_local $p0
i32.add)
(table $T0 0 anyfunc)
(memory $memory 1)
(export "memory" (memory 0))
(export "wasm_add" (func $wasm_add)))
您可以将您的小 wasm 代码转换为整数列表,例如,使用 Python:
f = open('code.wasm','rb')
code_as_integers = [s for s in f.read()]
f.close()
code
结果是一个整数列表,例如
[0, 97, 115, 109, 1, 0, 0, 0, 1, 135, 128, 128, 128, 0, 1, 96, 2, 127, 127, 1, 127, 3, 130, 128, 128, 128, 0, 1, 0, 4, 132, 128, 128, 128, 0, 1, 112, 0, 0, 5, 131, 128, 128, 128, 0, 1, 0, 1, 6, 129, 128, 128, 128, 0, 0, 7, 149, 128, 128, 128, 0, 2, 6, 109, 101, 109, 111, 114, 121, 2, 0, 8, 119, 97, 115, 109, 95, 97, 100, 100, 0, 0, 10, 141, 128, 128, 128, 0, 1, 135, 128, 128, 128, 0, 0, 32, 1, 32, 0, 106, 11]
然后,在浏览器的控制台输入
wasmCode = new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0, 1, 135, 128, 128, 128, 0, 1, 96, 2, 127, 127, 1,
127, 3, 130, 128, 128, 128, 0, 1, 0, 4, 132, 128, 128, 128, 0, 1, 112, 0, 0, 5, 131, 128, 128, 128, 0, 1,
0, 1, 6, 129, 128, 128, 128, 0, 0, 7, 149, 128, 128, 128, 0, 2, 6, 109, 101, 109, 111, 114, 121, 2, 0, 8,
119, 97, 115, 109, 95, 97, 100, 100, 0, 0, 10, 141, 128, 128, 128, 0, 1, 135, 128, 128, 128, 0, 0, 32, 1,
32, 0, 106, 11])
let instance;
WebAssembly.instantiate(wasmCode).then( ( module ) => { instance = module.instance; } )
然后,您将在instance
变量中看到您的导出,您可以从控制台调用其中的函数,例如
let sum = instance.exports.wasm_add(1,2);
推荐阅读
- java - 从二进制数据在android pdf查看器中显示PDF
- c# - SignOutAsync() 不注销用户
- javascript - 基于匹配重命名javascript对象并覆盖旧对象键
- python - Mac上的“ImportError:没有名为boto3的模块”
- python - 如何使用 python 代码在 Linux 上运行的 azure 函数应用程序中打开 Web 浏览器
- c - 随机词生成器中的奇怪输出
- python - 如何将 DRF 自定义序列化器字段与 DB 模型一起使用
- azure-devops - 是否可以以 excel 格式导出 azure devops 管道运行历史记录?
- angular - 当我在 angular7 中将 http 升级到 httpClient 时,rxjs 地图出现错误
- angular7 - 在角度 7 中嵌入带有计数的 twitter 时间线