linux - 在 Linux x86_64 系统调用和 int 0x80 相关吗?

标签 linux system-calls

我知道在 Linux x64 中,“系统调用”和“int 0x80”汇编程序指令会在软件中生成一个中断,要求内核做一些工作。它们有不同的操作码(0F 05 与 CD 80),前者更快。
我不清楚他们之间是否有任何关系:他们真的是独立的吗? (即:“系统调用”调用“int 0x80”吗?) 谢谢。

最佳答案

syscall (x86-64) 和 sysenter (x86-32) 指令更新更快,因此在可用时使用;但是 int 0x80 机制被保留以与旧的二进制文件兼容。没有语义差异——无论使用哪条指令将控制转移到内核,系统调用编号都是相同的,而且我认为参数也都在相同的位置。

我模糊地记得有一小部分系统调用只能使用 int 0x80 进行,因为它们不寻常的堆栈相关行为(克隆?execve?sigreturn?)但是可能不再是真的。

关于linux - 在 Linux x86_64 系统调用和 int 0x80 相关吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29440225/

相关文章:

c - 如何使用 C、CGI、HTML 为特定用户创建目录?

gdb - 如何从 uImage (arm) 中提取内核符号?

python - 在 Red Hat 6 上安装 numpy?

regex - 根据 Linux 中文件的数量重命名目录

linux - 如何自定义 golang-docker 镜像以使用 golang 进行脚本编写?

linux - 在远程 Linux 服务器上运行 ANT 命令

linux - 用于在未执行的 EC2 实例中启动服务的用户数据 bash 脚本

c - wait 和 waitpid 在 Linux 中返回时会阻塞 SIGCHLD 并解除阻塞吗?

unix 系统调用监视器

close() x86_64系统调用奇怪的返回值