系统调用x86_64 Linux中的内联asm?

为什么这打印垃圾,而不是退出我的程序优雅? 我在BSD上以这种方式使用系统调用,我想知道我需要什么来使它在Linux中工作。

int main(int argc, char **argv) { __asm ("movq $1,%rax; movq $0,%rdi; syscall"); /* exit(0) ? */ return 0; } 

谢谢。

Solutions Collecting From Web of "系统调用x86_64 Linux中的内联asm?"

为什么这打印垃圾,而不是退出我的程序优雅?

根据CESA-2009-001 ,“Syscall 1在i386上退出,但在x86_64上写”。

我需要什么来使它在Linux中工作

使用当前unistd_64.h中的系统调用序号

希望这可以帮助!

系统调用1退出i386,但写在x86-64我相信。

编辑:这似乎是不准确的:根据网络,似乎没有太多的x86-64 Linux程序集的信息,这似乎是系统调用指令之前预期的寄存器设置。

  rax system call number rbx arg0 rcx return address from syscall rdx arg2 rsi arg3 rdi arg4 r8 arg5 r9 arg1 (expected by gcc in %rcx) r10-r15 should be saved/restored by C code rbp dito What is dito??