data/
data.rs

1// This short example provides the utility to inspect
2// wasm file data section.
3
4extern crate sophon_wasm;
5
6use std::env;
7
8fn main() {
9
10    // Example executable takes one argument which must
11    // refernce the existing file with a valid wasm module
12    let args = env::args().collect::<Vec<_>>();
13    if args.len() != 2 {
14        println!("Usage: {} somefile.wasm", args[0]);
15        return;
16    }
17
18    // Here we load module using dedicated for this purpose
19    // `deserialize_file` function (which works only with modules)
20    let module = sophon_wasm::deserialize_file(&args[1]).expect("Failed to load module");
21
22    // We query module for data section. Note that not every valid
23    // wasm module must contain a data section. So in case the provided
24    // module does not contain data section, we panic with an error
25    let data_section = module.data_section().expect("no data section in module");
26
27    // Printing the total count of data segments
28    println!("Data segments: {}", data_section.entries().len());
29
30    let mut index = 0;
31    for entry in data_section.entries() {
32        // Printing the details info of each data segment
33        // see `elements::DataSegment` for more properties
34        // you can query
35        println!("  Entry #{}", index);
36
37        // This shows the initialization member of data segment
38        // (expression which must resolve in the linear memory location).
39        println!("    init: {}", entry.offset().code()[0]);
40
41        // This shows the total length of the data segment in bytes.
42        println!("    size: {}", entry.value().len());
43
44        index += 1;
45    }
46}