【发布时间】:2015-12-30 19:33:17
【问题描述】:
我有一个在 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
但是,这不起作用,但前提是我将 syscalls 替换为 int 0x80。这些不做同样的事情吗?我知道syscall 旨在降低延迟,但除此之外,我认为没有区别。为什么它不起作用?
【问题讨论】:
-
也许您正在寻找
sysenter? Linux 将带有用户空间sysenter包装器的页面映射到 32 位进程的虚拟地址空间。这是 VDSO。 -
确实有一些所谓的手册页,您确实需要查找。特别是关于
syscall、syscalls和您要调用的系统调用。你会在那里找到你必须知道的一切。