为什么没有系统调用' Linux下的指导工作?

时间:2015-12-30 19:33:17

标签: linux assembly x86-64

我有一个非常基本的汇编程序,可以在Linux userland中运行:

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

但是,这并不能正常工作,但前提是我将syscall替换为int 0x80。不要这些做同样的事情吗?我知道syscall被设计为低延迟,但除此之外,我并不认为存在差异。为什么它不起作用?

2 个答案:

答案 0 :(得分:2)

syscall仅适用于x86-64操作系统,您应将系统调用号码放在rax寄存器中,而不是eaxSee this website for more information.

答案 1 :(得分:1)

syscall指令不会在任何地方存储“返回RIP”或“返回RSP”,因此在使用syscall指令之前,这些指令通常存储在先前指令的寄存器中。

我怀疑Linux RCXRDX用于此目的;并且由于这个原因,所有其他参数最终都在不同的寄存器中。