为什么参数在 WebAssembly 导入函数调用时归零?

Why arguments are zeroed at WebAssembly imported function call?

我手动生成了一个 WASM 模块,通过 wasm2wat 反编译成下面的代码。

(module
  (type (;0;) (func))
  (type (;1;) (func (param i32 i32)))
  (import "std" "print" (func (;0;) (type 1)))
  (func (;1;) (type 0)
    i32.const 0
    i32.const 13
    call 0)
  (memory (;0;) 13)
  (export "main" (func 0))
  (export "data" (memory 0))
  (data (;0;) (i32.const 0) "Hello, world!"))

在 Node 站点我实例化模块,提供以下导入。

const imports = {
  std: {
    print: (utf8Offset, utf8Length) => {
      console.log([utf8Offset, utf8Length]);
      ...
    },
  },
};

main 函数运行时,console.log 报告两个零而不是 013。为什么?

问题已解决。我没有考虑到函数是从导入开始编号的,而不是从 in-module 定义开始编号的。

main 导出应如下所示:

(export "main" (func 1))