Advertisement
Guest User

Untitled

a guest
Jan 27th, 2022
1,146
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.17 KB | None | 0 0
  1. #define STDOUT 1
  2.  
  3. #define SYS_write 1
  4. #define SYS_exit 60
  5.  
  6. typedef unsigned long long int uint64;
  7.  
  8. _Noreturn void exit(int code)
  9. {
  10.     /* Infinite for-loop since this function can't return */
  11.     for (;;) {
  12.         asm("mov %0, %%rax\n\t"
  13.             "mov %1, %%rdi\n\t"
  14.             "syscall\n\t"
  15.             :
  16.             : "r" ((uint64) SYS_exit),
  17.               "r" ((uint64) code)
  18.             : "%rax", "%rdi");
  19.     }
  20. }
  21.  
  22. int write(int fd, const char *buf, int length)
  23. {
  24.     int ret;
  25.  
  26.     asm("mov %1, %%rax\n\t"
  27.         "mov %2, %%rdi\n\t"
  28.         "mov %3, %%rsi\n\t"
  29.         "mov %4, %%rdx\n\t"
  30.         "syscall\n\t"
  31.         "mov %%eax, %0"
  32.         : "=r" (ret)
  33.         : "r" ((uint64) SYS_write),
  34.           "r" ((uint64) fd),
  35.           "r" ((uint64) buf),
  36.           "r" ((uint64) length)
  37.         : "%rax", "%rdi", "%rsi", "%rdx");
  38.  
  39.     return ret;
  40. }
  41.  
  42. int strlen(const char *str)
  43. {
  44.     const char *i = str;
  45.     for (; *i; i++);
  46.     return i - str;
  47. }
  48.  
  49. int main(void)
  50. {
  51.     const char *msg = "Hello, World!\n";
  52.  
  53.     write(STDOUT, msg, strlen(msg));
  54.  
  55.     return 0;
  56. }
  57.  
  58. void _start(void)
  59. {
  60.     int main_ret = main();
  61.     exit(main_ret);
  62. }
  63.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement