Advertisement
Guest User

Untitled

a guest
Nov 17th, 2019
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.21 KB | None | 0 0
  1. #define __NR_exit 60
  2. #define __NR_write 1
  3.  
  4. typedef long ssize_t;
  5. typedef unsigned long size_t;
  6.  
  7. int  errno = 0;
  8.  
  9. static unsigned long
  10. errno_munge(unsigned long r)
  11. {
  12.     if ((long)r < 0 && (long)r > -4096) {
  13.         errno = -r;
  14.         return (unsigned long)-1;
  15.     } else {
  16.         return r;
  17.     }
  18. }
  19.  
  20. unsigned long
  21. _syscall1(int sysnr, unsigned long arg)
  22. {
  23.     unsigned long res;
  24.     asm ("syscall\n"
  25.          : "=a" (res)
  26.          : "0" (sysnr), "D" (arg)
  27.          : "memory");
  28.     return errno_munge(res);
  29. }
  30.  
  31. unsigned long
  32. _syscall3(int sysnr, unsigned long arg1, unsigned long arg2, unsigned long arg3)
  33. {
  34.     unsigned long res;
  35.     asm ("syscall\n"
  36.          : "=a" (res)
  37.          : "0" (sysnr), "D" (arg1), "S" (arg2), "d" (arg3)
  38.          : "memory");
  39.     return errno_munge(res);
  40. }
  41.  
  42. void
  43. exit(int code)
  44. {
  45.     _syscall1(__NR_exit, code);
  46. }
  47.  
  48. ssize_t
  49. write(int fd, const void *buf, size_t sz)
  50. {
  51.     return _syscall3(__NR_write, fd, (unsigned long)buf, sz);
  52. }
  53.  
  54. int
  55. main(int argc, char *argv[])
  56. {
  57.     write(1, "HELLO WORLD\n", sizeof("HELLO WORLD\n"));
  58.     return argc;
  59. }
  60.  
  61. void _start()
  62.     __asm__("pop %rdi");
  63.     __asm__("movq %rsp, %rsi");
  64.     __asm__("lea -8(%rsp),%rsp");
  65.     __asm__("call main");
  66.     __asm__("mov %rax, %rdi");
  67.     __asm__("call exit");
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement