为什么参数在 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
报告两个零而不是 0
和 13
。为什么?
问题已解决。我没有考虑到函数是从导入开始编号的,而不是从 in-module 定义开始编号的。
main
导出应如下所示:
(export "main" (func 1))
我手动生成了一个 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
报告两个零而不是 0
和 13
。为什么?
问题已解决。我没有考虑到函数是从导入开始编号的,而不是从 in-module 定义开始编号的。
main
导出应如下所示:
(export "main" (func 1))