module_params/
module_params.rs1mod common;
5
6use core::ffi::c_void;
7use dobby_rs_framework::framework::{ModuleHandle, params};
8use std::ffi::CString;
9
10#[inline(never)]
11fn local_add(x: i32) -> i32 {
12 x + 7
13}
14
15fn main() -> dobby_rs_framework::Result<()> {
16 let p = local_add as *const () as *mut c_void;
19 let f: fn(i32) -> i32 = unsafe { params::cast_fn(p) };
20 println!("cast_fn(local_add)(1) = {}", f(1));
21
22 let mut buf = [0u8; 8];
25 let buf_ptr = buf.as_mut_ptr() as *mut c_void;
26 unsafe {
27 params::write_ptr_value(buf_ptr, 0x11223344u32);
28 let v: u32 = params::read_ptr_value(buf_ptr as *const c_void);
29 println!("read_ptr_value = 0x{v:08x}");
30 }
31
32 let m = ModuleHandle::open(common::DEMO_LIB)?;
35 println!("opened module: {}", m.lib_name());
36
37 #[cfg(windows)]
40 let sym = "GetCurrentThreadId";
41 #[cfg(unix)]
42 let sym = "puts";
43
44 let addr = m.wrapped_sym(sym);
45 println!("resolved {sym} = {:?}", addr);
46
47 let _typed: *mut u8 = params::cast_ptr(buf_ptr);
50
51 let _ = CString::new(sym).ok();
54 Ok(())
55}