javascript - 尝试调用未知 WebAssembly 的函数

标签 javascript google-chrome webassembly

我尝试调用未知 WebAssembly 的函数 «或者更好地说,我尝试模拟它们» 如果函数有返回值,则获取其返回值。

我无法使用以下代码获得导出,但无法获得它需要哪些参数的任何信息。

instance.exports();

这就是为什么我编写了一个解析器来找出 WebAssembly-File 的函数及其参数的原因。获得这些信息后,我尝试调用导出函数并出现以下错误:

import object field 'env' is not an Object.

及其标题:

  (import "env" "DYNAMICTOP_PTR" (global $env.DYNAMICTOP_PTR i32))
  (import "env" "STACKTOP" (global $env.STACKTOP i32))
  (import "env" "STACK_MAX" (global $env.STACK_MAX i32))
  (import "env" "abort" (func $env.abort (type $t1)))
  (import "env" "enlargeMemory" (func $env.enlargeMemory (type $t2)))
  (import "env" "getTotalMemory" (func $env.getTotalMemory (type $t2)))
  (import "env" "abortOnCannotGrowMemory" (func $env.abortOnCannotGrowMemory (type $t2)))
  (import "env" "_gmtime" (func $env._gmtime (type $t3)))
  (import "env" "___setErrNo" (func $env.___setErrNo (type $t1)))
  (import "env" "_emscripten_memcpy_big" (func $env._emscripten_memcpy_big (type $t4)))
  (import "env" "___syscall20" (func $env.___syscall20 (type $t5)))
  (import "env" "_ftime" (func $env._ftime (type $t3)))
  (import "env" "memory" (memory $env.memory 256 256))
  (import "env" "table" (table $env.table 8 8 anyfunc))
  (import "env" "memoryBase" (global $env.memoryBase i32))
  (import "env" "tableBase" (global $env.tableBase i32))

原因很明确:因为我没有定义任何导入对象。我有以下想法来解决这个问题:

我定义了 importObject 以使其满足最低要求。我找到了一些导入的以下代码:

    table: new WebAssembly.Table({ initial: 0, maximum: 0, element: 'anyfunc' }),
    tableBase: 0,
    memory: memory,
    memoryBase: 1024,
    STACKTOP: 0,
    STACK_MAX: memory.buffer.byteLength,

但是有太多不同的导入。我找不到一个列表,它给了我所有的导入类型和它们的定义。这就是为什么我想创建自己的表来解决这个问题。你能给我一些信息或者帮我做这张 table 吗?

最佳答案

I couldn't find a list, which gives me all import types and their definition

您找不到这样的列表是因为它不存在!

WebAssembly 模块可以导入或导出函数(以及表、内存和全局变量)。您选择导入或导出的内容完全取决于您,并且取决于您尝试使用 WebAssembly 模块实现的目标。仅将两个数字加在一起的简单模块可能会导出单个 add 函数。

从您的代码示例来看,您似乎正在使用 Emscripten,它在您的 WebAssembly 模块周围添加了大量基础设施/框架代码。由于此代码通常不被视为其 API 的一部分,您可能需要深入研究代码以确定导入对象的外观:

https://github.com/kripken/emscripten/blob/78b44ed55cc4d0b4d79f62df9e80ae6f29a5345b/src/preamble.js

关于javascript - 尝试调用未知 WebAssembly 的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48992357/

相关文章:

JavaScript 解构 : copy class variables by reference to allow assigning and modifying values

javascript - AngularJS 在 Controller 中使用一个函数从服务返回数据以在 ng-repeat 中使用

javascript - 添加位置: absolute div below the page bottom?后如何使div具有100%的 body 高度

javascript - 解决混合内容的 Chrome 扩展?

google-chrome - 未在 Chrome 中呈现的特定元素的边框半径

javascript - Chrome 开发工具。我正在尝试从逐步调试中排除扩展 js 文件。但是设置中的 "Blackbox content script"不起作用

go - 如何将go指针作为wasm上下文数据传递?

javascript - 我如何检测 Emscripten 生成的 .js 何时完成加载 wasm,以便我可以运行调用它的 JS 函数?

单击链接时javascript获取href

javascript - 如何处理音频流