Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- extern crate libc;
- use libc::c_void;
- use std::mem;
- fn main() {
- unsafe {
- let program: *mut u8;
- let page: *mut c_void = libc::mmap(
- ::std::ptr::null_mut(),
- 4096,
- libc::PROT_EXEC | libc::PROT_READ | libc::PROT_WRITE,
- libc::MAP_ANONYMOUS | libc::MAP_PRIVATE,
- 0,
- 0,
- );
- program = mem::transmute(page);
- // mov rax, 14
- // ret
- let p = [0x48, 0xc7, 0xc0, 0x0e, 0x00, 0x00, 0x00, 0xc3].as_ptr();
- program.copy_from_nonoverlapping(p, 8);
- let f: fn() -> i64 = mem::transmute(page);
- let ret = f();
- println!("{}", ret); // => 14
- }
- }
Add Comment
Please, Sign In to add comment