繁体   English   中英

来自x86_64 Linux中的内联asm的Syscall?

[英]Syscall from inline asm in x86_64 Linux?

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

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

谢谢。

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

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

我需要什么才能使它在Linux中运行

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

希望这可以帮助!

Syscall 1在i386上退出,但我相信写在x86-64上。

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

 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??

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM