1 个不稳定版本
使用旧的 Rust 2015
0.31.3 | 2019年5月14日 |
---|
#1554 在 解析器实现
被 2 crates 使用
230KB
6.5K SLoC
susywasm
低级 WebAssembly 格式库。
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-fuzz
和 susywasm-opt
(来自 https://github.com/WebAssembly/binaryen)进行模糊测试。
- 确保您已安装构建
binaryen
和cargo-fuzz
(cmake
和 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中的任何贡献,应如上所述双许可,不附加任何额外条款或条件。