我知道在 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/