Guest User

Untitled

a guest
Apr 23rd, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.06 KB | None | 0 0
  1. // author: @hc0d3r
  2. // license: wtfpl
  3.  
  4. #include <asm/unistd_64.h>
  5. #include <sys/mman.h>
  6. #include <fcntl.h>
  7. #include <stdio.h>
  8.  
  9. static const char syscall_sc[]=
  10. "\x48\x89\xf8" // mov %rdi,%rax
  11. "\x48\x89\xf7" // mov %rsi,%rdi
  12. "\x48\x89\xd6" // mov %rdx,%rsi
  13. "\x48\x89\xca" // mov %rcx,%rdx
  14. "\x4d\x89\xc2" // mov %r8,%r10
  15. "\x4d\x89\xc8" // mov %r9,%r8
  16. "\x4c\x8b\x4c\x24\x08" // mov 0x8(%rsp),%r9
  17. "\x0f\x05" // syscall
  18. "\xc3"; // ret
  19.  
  20. #define x86_64_syscall(n, args...) ((long(*)(long, ...))(syscall_sc))(n, args)
  21.  
  22. int main(void){
  23. char msg[]="Mommy I know the System V ABI\n";
  24.  
  25. x86_64_syscall(__NR_write, 1, msg, sizeof(msg)-1);
  26.  
  27. void *map_addr = (void*)x86_64_syscall(__NR_mmap, 0x13370000, 4096, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);
  28. printf("addr = %p\n", map_addr);
  29.  
  30. int fd = x86_64_syscall(__NR_open, "/etc/issue", O_RDONLY);
  31. printf("fd = %d\n", fd);
  32.  
  33. x86_64_syscall(__NR_close, fd);
  34. x86_64_syscall(__NR_munmap, map_addr, 4096);
  35. x86_64_syscall(__NR_exit, 5);
  36. }
Add Comment
Please, Sign In to add comment