[英]Why doesn't the 'syscall' instruction work under Linux?
我有一个非常基本的汇编程序,可以在Linux用户环境中运行:
section .text
global _start
_start:
mov edx, 14
mov ecx, msg
mov ebx, 1
mov eax, 4
syscall
mov eax, 1
syscall
section .data
msg db "Hello, World!", 0xA
但是,这不能按原样工作,仅当我用int 0x80
替换syscall
时才可以。 这些不是做同样的事情吗? 我知道syscall
被设计为低延迟的,但是除此之外,我认为没有区别。 为什么不起作用?
syscall
仅在x86-64操作系统上有效,您应该将系统调用号放在rax
寄存器中,而不是eax
。 有关更多信息,请参见此网站。
syscall
指令不在任何地方存储“ return RIP”或“ return RSP”,因此通常在使用syscall
指令之前将它们存储在先前指令的寄存器中。
我怀疑在Linux上将RCX
和RDX
用于此目的。 因此,所有其他参数最终都存放在不同的寄存器中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.