#wasm-bytecode #serde #bytecode #interpreter

无需 std gparity-wasm

WebAssembly 低级格式库

显示软件包…

1 个不稳定版本

0.45.0 2023年7月11日

#34#wasm-bytecode

MIT/Apache

305KB
9K SLoC

parity-wasm

低级 WebAssembly 格式库。

Build Status crates.io link

文档

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

添加到 Cargo.toml

[dependencies]
parity-wasm = "0.42"

然后

let module = parity_wasm::deserialize_file("./res/cases/v1/hello.wasm").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 wasm file: {}", code_section.bodies().len());

Wabt 测试套件

parity-wasm 支持 wasm 测试套件,运行涉及反序列化的断言。

要运行测试套件

  • 检出子模块(git submodule update --init --recursive
  • 运行 cargo test --release --workspace

解码器可以使用 cargo-fuzzwasm-opt 进行模糊测试

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

no_std 软件包

该软件包有一个默认启用的 std 功能。要在 no_std 上下文中使用此软件包,请将以下内容添加到您的 Cargo.toml(仍需要分配器)

[dependencies]
parity-wasm = { version = "0.41", default-features = false }

许可协议

parity-wasm 主要在 MIT 许可证和 Apache 许可证(版本 2.0)的条款下分发,任选其一。

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

贡献

除非您明确声明,否则根据Apache-2.0许可证定义,您提交给parity-wasm的任何有意贡献均应双重许可,如上所述,不得添加任何额外条款或条件。

无运行时依赖