有没有办法检查 wasm 模块的导入
Is there a way to inspect a wasm module for imports
让我稍微解释一下我在做什么。我有一个应用程序,我正在嵌入一个 wasm 引擎(特别是 wasmtime)并用 Rust 编写 wasm。目标是 而不是 浏览器,所以我没有使用 wasm-bindgen。我正在尝试从主机环境中导入两个函数。我已经让它工作了,但是有一点小问题,我想删除这个小问题。这是我遇到的问题。我已经能够弄清楚如何让 Rust 在 wasm 输出中生成导入语句。问题是,如果不使用这些函数,则不会包含 wasm 中的导入语句。 Wasmtime 似乎要求传递给 wasm 实例的导入数量与导入语句的数量相匹配。有道理的是,如果 wasm 模块期望导入,如果你不提供它们就会有问题。问题是,如果您提供导入但未使用它们,这也是一个错误。
所以我看到有两种方法可以解决这个问题,要么我需要弄清楚如何让 Rust 包含导入语句,即使它们没有被使用(现在的技巧是调用函数但忽略结果它基本上是一个空操作)或者找到一种方法来反省 wasm 并弄清楚它期望什么样的导入并且只传递它所要求的。
我的问题是正确的方法,如果正确的话,你是怎么做到的?
您可以使用 The WebAssembly Binary Toolkit. It is open source 在 .wasm
(二进制格式)和 .wat
(文本格式)之间进行转换。也许它可以帮助您以编程方式提取所需的导入。
正确的方法,应该是你的主机环境在你初始化实例之前给你导入要求。 Module 为您提供导入。请参阅“实例变量”。您在模块加载和创建本身需要这些导入的实例之间得到它。
要查找 wasm 模块的导入,您可以使用命令行工具将 .wasm
转换为 .wat
并检查 wat 文件(使用 grep 或类似工具)。例如 wasm-dis
是 binaryen
的一部分,或者 wasm2wat
是 wabt
的一部分,可以使用(或者 wasm-objdump
也是 [=15= 的一部分]).
让我稍微解释一下我在做什么。我有一个应用程序,我正在嵌入一个 wasm 引擎(特别是 wasmtime)并用 Rust 编写 wasm。目标是 而不是 浏览器,所以我没有使用 wasm-bindgen。我正在尝试从主机环境中导入两个函数。我已经让它工作了,但是有一点小问题,我想删除这个小问题。这是我遇到的问题。我已经能够弄清楚如何让 Rust 在 wasm 输出中生成导入语句。问题是,如果不使用这些函数,则不会包含 wasm 中的导入语句。 Wasmtime 似乎要求传递给 wasm 实例的导入数量与导入语句的数量相匹配。有道理的是,如果 wasm 模块期望导入,如果你不提供它们就会有问题。问题是,如果您提供导入但未使用它们,这也是一个错误。
所以我看到有两种方法可以解决这个问题,要么我需要弄清楚如何让 Rust 包含导入语句,即使它们没有被使用(现在的技巧是调用函数但忽略结果它基本上是一个空操作)或者找到一种方法来反省 wasm 并弄清楚它期望什么样的导入并且只传递它所要求的。
我的问题是正确的方法,如果正确的话,你是怎么做到的?
您可以使用 The WebAssembly Binary Toolkit. It is open source 在 .wasm
(二进制格式)和 .wat
(文本格式)之间进行转换。也许它可以帮助您以编程方式提取所需的导入。
正确的方法,应该是你的主机环境在你初始化实例之前给你导入要求。 Module 为您提供导入。请参阅“实例变量”。您在模块加载和创建本身需要这些导入的实例之间得到它。
要查找 wasm 模块的导入,您可以使用命令行工具将 .wasm
转换为 .wat
并检查 wat 文件(使用 grep 或类似工具)。例如 wasm-dis
是 binaryen
的一部分,或者 wasm2wat
是 wabt
的一部分,可以使用(或者 wasm-objdump
也是 [=15= 的一部分]).