Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Or just

  int main(void) {
    asm volatile("syscall" : : "a"(1), "d"(14), "D"(1), "S"("hello world!\n"));
    return 0;
  }
Though the clobber list is weak spot, I don't know exactly what it should have in this case.


You want:

    long ax;
    asm volatile("syscall" : "=a"(ax) : "0"(1), "D"(1), "S"("hello world!\n"), "d"(14));
You can also say:

    long ax = 1;
    asm volatile("syscall" : "+a"(ax) : "D"(1), "S"("hello world!\n"), "d"(14));
https://justine.lol/dox/rmsiface.txt


Got some sleep and took a second look. You actually want:

    long ax = 1;
    asm volatile("syscall" : "+a"(ax) : "D"(1), "S"("hello world!\n"), "d"(14) : "rcx", "r11");
Sorry folks! Note also this only works on Linux. On BSDs for example, even if you change the magic number, BSDs may clobber all the call-clobbered registers. So with those OSes it's usually simplest to write an assembly stub like this:

    my_write:
      mov $4,%eax
      syscall
      ret


I don't suppose you know the syscall clobbered list for aarch64 Linux? Can't find it documented anywhere and not sure how to dig it out of the kernel

A sibling comment pointed at https://chromium.googlesource.com/linux-syscall-support/+/re... which suggests none are clobbered outside of the arguments used by a given call which is possible but seems unlikely


I think that's accurate. Example code:

    static privileged int GetPid(void) {
      int res;
    #ifdef __x86_64__
      asm volatile("syscall"
                   : "=a"(res)
                   : "0"(__NR_linux_getpid)
                   : "rcx", "r11", "memory");
    #elif defined(__aarch64__)
      register long res_x0 asm("x0");
      asm volatile("mov\tx8,%1\n\t"
                   "svc\t0"
                   : "=r"(res_x0)
                   : "i"(__NR_linux_getpid)
                   : "x8", "memory");
      res = res_x0;
    #endif
      return res;
    }
You should be fine.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: