linux - 为什么 'syscall' 指令在 Linux 下不起作用?

标签 linux assembly x86-64

我有一个在 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

但是,这并不能正常工作,但前提是我将 syscall 替换为 int 0x80。这些不是做同样的事情吗?我知道 syscall 旨在降低延迟,但除此之外,我认为没有区别。为什么它不起作用?

最佳答案

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

关于linux - 为什么 'syscall' 指令在 Linux 下不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34536006/

相关文章:

c++ - 获取传入 UDP 数据包的目标端口

linux - 适用于 Linux 的可重现自定义分发构建系统

c# - 通过 Marshal.GetFunctionPointerForDelegate 返回的指针进行调用会导致访问冲突

cmp je/jg 他们如何在汇编中工作

c++ - 在 Mac OS 上编译 Halide 的 camera_pipe 应用程序时出现问题

arrays - 在 Shell 脚本中组织一系列数据

java - 无法在 linux ubuntu 上使用 Eclipse java IDE 连接到 MySQL,但使用在 Windows 上完美运行的代码

组装正确使用字/字节/字 ptr

linux - 除了内核线程堆栈之外,内核是否有自己的堆栈?

linux - 如何强制使用 int $0x80 而不是 sysenter 进行系统调用检测