From 2de77003fbb79a2df0842f15910d32b5b1429c75 Mon Sep 17 00:00:00 2001 From: Hatter Jiang Date: Sat, 21 Jan 2023 00:50:14 +0800 Subject: [PATCH] feat: add container --- interface.wit | 13 ------------- javascript-container/Cargo.toml | 12 ++++++++++++ javascript-container/src/main.rs | 33 ++++++++++++++++++++++++++++++++ javascript-engine/Cargo.toml | 1 + 4 files changed, 46 insertions(+), 13 deletions(-) delete mode 100644 interface.wit create mode 100644 javascript-container/Cargo.toml create mode 100644 javascript-container/src/main.rs diff --git a/interface.wit b/interface.wit deleted file mode 100644 index d65ea1b..0000000 --- a/interface.wit +++ /dev/null @@ -1,13 +0,0 @@ -interface imports { - thunk: func() -} - -interface exports { - thunk: func() -} - -world smoke { - import imports: imports - default export exports -} - diff --git a/javascript-container/Cargo.toml b/javascript-container/Cargo.toml new file mode 100644 index 0000000..f1b3bd9 --- /dev/null +++ b/javascript-container/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "javascript-container" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +anyhow = "1.0" +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" +wasmtime = "4.0" diff --git a/javascript-container/src/main.rs b/javascript-container/src/main.rs new file mode 100644 index 0000000..c5937a1 --- /dev/null +++ b/javascript-container/src/main.rs @@ -0,0 +1,33 @@ +use anyhow::Result; +use wasmtime::{Config, Engine, Linker, Module, Store}; + +fn main() -> Result<()> { + let config = Config::default(); + let engine = Engine::new(&config).unwrap(); + + let wasm_bytes = include_bytes!("/Users/hatterjiang/Code/hattergit/secure-javascript-container/javascript-engine/target/wasm32-unknown-unknown/debug/javascript_engine.wasm"); + let module = Module::new(&engine, wasm_bytes)?; + + let linker = Linker::new(&engine); + let mut store = Store::new(&engine, ()); + + let instance = linker.instantiate(&mut store, &module)?; + + let memory = instance.get_memory(&mut store, "memory").expect("SHOULD NOT HAPPEN"); + let malloc = instance.get_typed_func::(&mut store, "malloc")?; + let free = instance.get_typed_func::<(i32, i32), ()>(&mut store, "free")?; + let eval = instance.get_typed_func::<(i32, i32), (i32, i32)>(&mut store, "eval")?; + + let js = "1+2"; + let js_bytes = js.as_bytes(); + let js_bytes_len = js_bytes.len(); + let ptr = malloc.call(&mut store, js.as_bytes().len() as i32)?; + let memory_data_mut = memory.data_mut(&mut store); + for i in 0..js_bytes_len { + memory_data_mut[ptr as usize + i] = js_bytes[i]; + } + let eval_result = eval.call(&mut store, (ptr, js_bytes_len as i32))?; + println!("Eval result: {:?}", eval_result); + + Ok(()) +} diff --git a/javascript-engine/Cargo.toml b/javascript-engine/Cargo.toml index 75a20c4..498eeda 100644 --- a/javascript-engine/Cargo.toml +++ b/javascript-engine/Cargo.toml @@ -9,6 +9,7 @@ edition = "2021" crate-type = ['cdylib'] [dependencies] +anyhow = "1.0.68" boa_engine = { version = "0.16.0", path = "external/boa/boa_engine"} getrandom = { version = "0.2.8", features = ["js"] } serde = { version = "1.0", features = ["derive"] }