get function/export names from wasm

master
silur 2021-11-30 00:01:25 +01:00
parent 6c238f5b7f
commit dfc94311dd
2 changed files with 14 additions and 25 deletions

View File

@ -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"

View File

@ -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)]