在Linux中x86_64是syscalls和int 0x80有关吗?

时间:2015-04-03 21:56:52

标签: linux system-calls

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

3 个答案:

答案 0 :(得分:4)

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

我有一个暗淡的回忆,即只有使用int 0x80进行少量系统调用,因为它们与堆栈相关的异常行为(clone?execve?sigreturn?)但可能不再是真。

答案 1 :(得分:1)

传闻

int 0x80已过时(因为速度缓慢)。顺便说一下,你真的想用vdso(7)

AFAIK,两个指令都进入内核,每个指令都有一些(短)内核处理序列,最终跳转到系统调用表。

答案 2 :(得分:0)

int 0x80是与32-bit程序集一起使用的8086 - 80386中断。 x86_64在其位置使用syscall。请参阅/usr/include/asm/unistd_32.hunistd_64.h中每个期望调用各种内核函数的不同调用号的差异。