libemei/
lib.rs

1#![doc=include_str!("../README.md")]
2
3pub mod insts;
4pub mod page_manage;
5
6/*
7macro_rules! debug_code_no_ret {
8    ($code:expr) => {
9        let page_size = PageSize::from_system();
10        let mut r = $code;
11        r.append(&mut near_ret());
12        let r = PageHandle::from(page_size, &r);
13        let code: extern "C" fn() = unsafe { std::mem::transmute(r.get_ptr()) };
14        dbg!((code)());
15    };
16}
17 */
18
19#[test]
20#[cfg(target_arch = "x86_64")]
21fn x86_64_test() {
22    use insts::x86_64::inst_list::*;
23    use insts::x86_64::registers::*;
24    use insts::x86_64::Op1;
25
26    use crate::page_manage::PageHandle;
27    use crate::page_manage::PageSize;
28
29    let r = mov(
30        false,
31        true,
32        Op1::Direct(TargetReg::from(Register64::R8 as u8)),
33        TargetReg::from(Register64::Rdi as u8),
34    );
35    let r1 = mov(
36        false,
37        true,
38        Op1::Direct(TargetReg::from(Register64::Rax as u8)),
39        TargetReg::from(Register64::R8 as u8),
40    );
41    let r2 = add_imm8(
42        false,
43        true,
44        Op1::Direct(TargetReg::from(Register64::Rax as u8)),
45        4,
46    );
47    let r3 = near_ret();
48    let src = [r.iter(), r1.iter(), r2.iter(), r3.iter()]
49        .into_iter()
50        .flatten()
51        .cloned()
52        .collect::<Vec<u8>>();
53
54    let r = PageHandle::from(PageSize::from(src.capacity()), &src);
55
56    let code: extern "C" fn(i32) -> i32 = unsafe { std::mem::transmute(r.get_ptr()) };
57
58    dbg!((code)(1));
59}
60
61#[test]
62#[cfg(target_arch = "riscv")]
63fn rv_add_test() {
64    use insts::riscv::rv32::rv32i::*;
65    use insts::riscv::registers::*;
66
67    use crate::page_manage::PageHandle;
68    use crate::page_manage::PageSize;
69}
70
71/*
72#[test]
73#[cfg(any(target_arch = "x86_64", target_arch = "x86"))]
74fn nop_length_test() {
75    use crate::insts::x86_64::inst_list::*;
76    use crate::page_manage::*;
77    debug_code_no_ret!(nop1());
78    debug_code_no_ret!(nop2());
79    debug_code_no_ret!(nop3());
80    debug_code_no_ret!(nop4());
81    debug_code_no_ret!(nop5());
82    debug_code_no_ret!(nop6());
83    debug_code_no_ret!(nop7());
84    debug_code_no_ret!(nop8());
85    debug_code_no_ret!(nop9());
86}
87 */