#wasm-bytecode #wasm-binary #wasm #interpreter #bytecode #serde #binary-format

无需 std susywasm

WebAssembly 二进制格式序列化/反序列化/解释器

1 个不稳定版本

使用旧的 Rust 2015

0.31.3 2019年5月14日

#1554解析器实现


2 crates 使用

MIT/Apache

230KB
6.5K SLoC

susywasm

低级 WebAssembly 格式库。

Build Status crates.io link

文档

Rust WebAssembly 格式序列化/反序列化

添加到 Cargo.toml

[dependencies]
susywasm = "0.31"

然后


extern crate susywasm;

let module = susywasm::deserialize_file("./res/cases/v1/hello.susywasm").unwrap();
assert!(module.code_section().is_some());

let code_section = module.code_section().unwrap(); // Part of the module with functions code

println!("Function count in susywasm file: {}", code_section.bodies().len());

Wabt 测试套件

susywasm 支持完整的 wabt 测试套件 (https://github.com/WebAssembly/testsuite),运行涉及反序列化的断言。

要运行测试套件

  • 确保您已安装构建 wabt 的所有先决条件(因为 susywasm 使用 wabt-rs 内部构建它,请参阅 https://github.com/WebAssembly/wabt
  • 检出子模块(git submodule update --init --recursive
  • 运行 cargo test --release --manifest-path=spec/Cargo.toml

解码器可以使用 cargo-fuzzsusywasm-opt(来自 https://github.com/WebAssembly/binaryen)进行模糊测试。

  • 确保您已安装构建 binaryencargo-fuzzcmake 和 C++11 工具链)的所有先决条件。
  • 检出子模块(git submodule update --init --recursive
  • 使用 cargo fuzz 子命令安装 cargo install cargo-fuzz
  • 将 rustup 设置为使用 nightly 工具链,因为 cargo fuzz 使用 rust 编译器插件:rustup override set nightly
  • 运行 cargo fuzz run deserialize

no_std crates

此 crate 具有一个默认启用的 std 功能。要在 no_std 上下文中使用此 crate,请将以下内容添加到您的 Cargo.toml

[dependencies]
susywasm = { version = "0.31", default-features = false }

在分配器API稳定之前,此类用法仅限于夜间的Rust。

许可证

susywasm主要根据MIT许可证和Apache许可证(版本2.0)的条款进行分发,您可选择其一。

详细信息请参阅LICENSE-APACHE和LICENSE-MIT。

贡献

除非您明确说明,否则根据Apache-2.0许可证定义的,您有意提交以包含在susywasm中的任何贡献,应如上所述双许可,不附加任何额外条款或条件。

依赖项