userspace/target/operating_system/linux/syscall/
mmap.rs1use crate::target::arch::{Arch, traits::Callable};
2
3pub mod flags;
4pub mod prot;
5
6pub use flags::Flag;
7pub use prot::Prot;
8
9hooking!(MMAP);
10
11#[inline(always)]
12#[rustfmt::skip]
13pub fn mmap(addr: *mut u8, length: usize, prot: i32, flags: i32, fd: i32, offset: i64) -> crate::Result {
14 let arch_result = Arch::syscall6(
15 NUMBER,
16 addr as usize,
17 length,
18 prot as usize,
19 flags as usize,
20 fd as usize,
21 offset as usize,
22 );
23
24 handle_result(arch_result)
25}
26
27pub mod ok {
28
29 ample::result!( Ok; "MUnMap Ok"; usize; [
30 [0; OK; Default; usize; "Ok"; "All good"],
31 ]);
32
33 impl Ok {
34 pub fn from_no(no: usize) -> Self {
35 Ok::Default(no)
36 }
37 }
38}
39
40pub mod error {
41 ample::result!(Error; "MUnMap error"; usize; [
42 [1; ERROR; Default; usize; "Error"; "Something wicked this way comes"],
43 ]);
44
45 impl Error {
46 pub fn from_no(no: usize) -> Self {
47 Error::Default(no)
48 }
49 }
50}
51
52pub use error::Error;
53pub use ok::Ok;
54
55pub type Result = core::result::Result<Ok, Error>;
56
57pub fn handle_result(result: crate::Result) -> crate::Result {
58 match result {
60 crate::Result::Ok(crate::Ok::Target(crate::target::Ok::Arch(
61 crate::target::arch::Ok::X86_64Syscall(
62 crate::target::arch::syscall::Ok::X86_64Syscall6(
63 crate::target::arch::syscall::syscall6::Ok::Default(m),
64 ),
65 ),
66 ))) => core::result::Result::Ok(crate::Ok::Target(crate::target::Ok::Os(
67 crate::target::os::Ok::Syscall(crate::target::os::syscall::Ok::MMap(
68 crate::target::os::syscall::mmap::Ok::Default(m),
69 )),
70 ))),
71 _ => core::result::Result::Err(crate::Error::Target(crate::target::Error::Os(
72 crate::target::os::Error::Syscall(crate::target::os::syscall::Error::MMap(
73 Error::Default(3),
74 )),
75 ))),
76 }
77}