Guest User

Untitled

a guest
Aug 20th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.68 KB | None | 0 0
  1. extern crate libc;
  2. use libc::c_void;
  3. use std::mem;
  4.  
  5. fn main() {
  6. unsafe {
  7. let program: *mut u8;
  8. let page: *mut c_void = libc::mmap(
  9. ::std::ptr::null_mut(),
  10. 4096,
  11. libc::PROT_EXEC | libc::PROT_READ | libc::PROT_WRITE,
  12. libc::MAP_ANONYMOUS | libc::MAP_PRIVATE,
  13. 0,
  14. 0,
  15. );
  16. program = mem::transmute(page);
  17.  
  18. // mov rax, 14
  19. // ret
  20. let p = [0x48, 0xc7, 0xc0, 0x0e, 0x00, 0x00, 0x00, 0xc3].as_ptr();
  21. program.copy_from_nonoverlapping(p, 8);
  22. let f: fn() -> i64 = mem::transmute(page);
  23. let ret = f();
  24. println!("{}", ret); // => 14
  25. }
  26. }
Add Comment
Please, Sign In to add comment