将 WebAssembly 文本格式转换为 Wasm
WebAssembly 具有基于 S 表达式的文本表示形式,这是一种中间形式,旨在在文本编辑器、浏览器开发者工具等中公开。本文简要介绍了其工作原理以及如何使用可用工具将文本格式文件转换为 Wasm 格式。
注意: 文本格式文件通常以 .wat
扩展名保存。历史上,也使用过 .wast
扩展名,但现在它用于 WebAssembly 测试套件使用的脚本语言。
初步了解文本格式
让我们来看一个简单的例子——以下程序从名为 my_namespace
的模块导入名为 imported_func
的函数,并导出名为 exported_func
的函数。
wasm
(module
(func $i (import "my_namespace" "imported_func") (param i32))
(func (export "exported_func")
i32.const 42
call $i
)
)
WebAssembly 函数 exported_func
导出供我们的环境使用(例如,我们使用 WebAssembly 模块的 Web 应用程序)。当它被调用时,它会调用一个名为 imported_func
的导入的 JavaScript 函数,该函数使用作为参数提供的值 (42) 运行。
将文本 .wat 文件转换为二进制 .wasm 文件
让我们尝试将上述 .wat
文本表示示例转换为 .wasm
汇编格式。
- 首先,将上述列表复制到一个文本文件中;将其命名为
simple.wat
。 - 在我们能够使用它之前,我们需要将这种文本表示形式汇编成浏览器实际读取的汇编语言。为此,我们可以使用 wabt 工具,该工具包括用于在 WebAssembly 的文本表示形式和 Wasm 之间进行转换的编译器,以及更多其他功能。请访问 https://github.com/webassembly/wabt — 按照此页面上的说明设置该工具。
- 构建完该工具后,将
/wabt/out/clang/Debug
目录添加到系统的PATH
中。 - 接下来,执行 wat2wasm 程序,将输入文件的路径作为参数传递,后跟
-o
参数,然后是输出文件的路径。bashwat2wasm simple.wat -o simple.wasm
这会将 Wasm 转换为名为 simple.wasm
的文件,其中包含 .wasm
汇编代码。
注意: 您还可以使用 wasm2wat 工具将汇编转换回文本表示形式;例如 wasm2wat simple.wasm -o text.wat
。
查看汇编输出
由于输出文件是基于汇编的,因此无法在普通文本编辑器中查看。但是,您可以使用 wat2wasm 工具的 -v
选项查看它。尝试以下操作:
bash
wat2wasm simple.wat -v
这将在您的终端中以以下方式输出:
另请参阅
- 理解 WebAssembly 文本格式 — 对文本格式语法的详细解释。
- 从 C/C++ 编译到 WebAssembly — Binaryen/Emscripten 等工具都将您的源代码编译为 Wasm,并创建在 JavaScript 上下文中运行模块所需的 API 代码。详细了解如何使用它们。
- 使用 WebAssembly JavaScript API — 如果您想了解有关 WebAssembly API 代码如何工作的更多信息,请阅读此内容。
- 文本格式 — WebAssembly GitHub 存储库上对文本格式的更多解释。
- wast-loader — 一个 webpack 加载器,可以为您处理所有这些操作。