frida_rs/plumbing/
frida.rs

1use crate::plumbing::nativepointer::NativePointer;
2use wasm_bindgen::prelude::*;
3use wasm_bindgen::JsCast;
4
5#[wasm_bindgen]
6extern "C" {
7    #[wasm_bindgen(js_namespace = Frida)]
8    pub static version: String;
9
10    #[wasm_bindgen(js_namespace = Frida, js_name = heapSize)]
11    pub static heap_size: usize;
12
13    #[wasm_bindgen(js_name = hexdump)]
14    pub fn hexdump(target: &NativePointer) -> String;
15
16    #[wasm_bindgen(js_name = hexdump)]
17    pub fn hexdump_arraybuffer(target: &ArrayBuffer) -> String;
18
19    #[wasm_bindgen(js_name = send)]
20    pub fn send(message: &JsValue, data: &JsValue);
21
22    #[wasm_bindgen(js_name = recv)]
23    pub fn recv(callback: &js_sys::Function);
24
25    #[wasm_bindgen(js_name = recv)]
26    pub fn recv_with_type(type_filter: &str, callback: &js_sys::Function);
27
28    ///Generic type representing a message from your Frida application.
29    ///
30    ///This should be deserialized into an appropriate Rust structure with the
31    ///[`into_serde`](RecvMessage::into_serde) method.
32    #[wasm_bindgen]
33    #[derive(Debug)]
34    pub type RecvMessage;
35
36    #[wasm_bindgen(js_name = ArrayBuffer)]
37    #[derive(Debug)]
38    pub type ArrayBuffer;
39
40    #[wasm_bindgen(method, js_name = unwrap)]
41    pub fn unwrap(this: &ArrayBuffer) -> NativePointer;
42}
43
44impl RecvMessage {
45    pub fn into_serde<T>(self) -> serde_json::Result<T>
46    where
47        T: for<'a> serde::de::Deserialize<'a>,
48    {
49        let s = JsValue::unchecked_from_js_ref(&self);
50        s.into_serde()
51    }
52}