get function/export names from wasm
parent
6c238f5b7f
commit
dfc94311dd
|
@ -9,3 +9,4 @@ edition = "2021"
|
||||||
wasmi = "0.9.1"
|
wasmi = "0.9.1"
|
||||||
wabt = "0.10.0"
|
wabt = "0.10.0"
|
||||||
clap = "3.0.0-beta.2"
|
clap = "3.0.0-beta.2"
|
||||||
|
parity-wasm = "0.42.2"
|
||||||
|
|
38
src/lib.rs
38
src/lib.rs
|
@ -8,13 +8,16 @@ fn mutate() -> Vec<u8> {
|
||||||
unimplemented!();
|
unimplemented!();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn parse_expr(expr: Vec<u8>) -> Vec<u8> {
|
||||||
|
unimplemented!();
|
||||||
|
}
|
||||||
|
|
||||||
fn asd() {
|
fn asd() {
|
||||||
// Parse WAT (WebAssembly Text format) into wasm bytecode.
|
|
||||||
let wasm_binary: Vec<u8> =
|
let wasm_binary: Vec<u8> =
|
||||||
wabt::wat2wasm(
|
wabt::wat2wasm(
|
||||||
r#"
|
r#"
|
||||||
(module
|
(module
|
||||||
(func (export "test") (result i32)
|
(func (export "test") (param i32) (result i32)
|
||||||
i32.const 1337
|
i32.const 1337
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
@ -22,30 +25,15 @@ fn asd() {
|
||||||
)
|
)
|
||||||
.expect("failed to parse wat");
|
.expect("failed to parse wat");
|
||||||
|
|
||||||
// Load wasm binary and prepare it for instantiation.
|
let module = parity_wasm::elements::Module::from_bytes(&wasm_binary)
|
||||||
let module = wasmi::Module::from_buffer(&wasm_binary)
|
|
||||||
.expect("failed to load wasm");
|
.expect("failed to load wasm");
|
||||||
|
|
||||||
// Instantiate a module with empty imports and
|
for (export, function) in module.export_section().unwrap().entries().iter()
|
||||||
// assert that there is no `start` function.
|
.zip(module.function_section().unwrap().entries().iter()) {
|
||||||
let instance =
|
let func_body: parity_wasm::elements::FuncBody =
|
||||||
ModuleInstance::new(
|
function.try_into().unwrap();
|
||||||
&module,
|
println!("{} - {:?}", export.field(), function);
|
||||||
&ImportsBuilder::default()
|
}
|
||||||
)
|
|
||||||
.expect("failed to instantiate wasm module")
|
|
||||||
.assert_no_start();
|
|
||||||
|
|
||||||
// Finally, invoke the exported function "test" with no parameters
|
|
||||||
// and empty external function executor.
|
|
||||||
assert_eq!(
|
|
||||||
instance.invoke_export(
|
|
||||||
"test",
|
|
||||||
&[],
|
|
||||||
&mut NopExternals,
|
|
||||||
).expect("failed to execute export"),
|
|
||||||
Some(RuntimeValue::I32(1337)),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
|
Loading…
Reference in New Issue