INT 0X80 和 SYSCALL 的区别

逆向工程 x86 系统调用
2021-06-26 10:18:41

SYSCALL指令被认为是64位版本的INT 0x80的,但它仍然可以使用64位代码后(尽管strace的错误进行解码,因为64位ABI我猜的话)通常经过一个“遗留条目”但是有一点我不太明白,为什么SYSCALL指令更快?

1个回答

简短的回答是它的syscall开销比int 0x80.

有关原因的更多详细信息,请参阅Intel x86 vs x64 system call的已接受答案,其中提出了一个几乎相同的问题:

有人告诉我,系统调用比生成软件中断更轻巧、更快。为什么它在 x64 上比 x86 快,我可以使用 int 80h 在 x64 上进行系统调用吗?

也可以看看:

  • 英特尔 P6 与 P7 系统调用性能
    • 此电子邮件线程讨论了由与 int 0x80
  • Linux 2.6中基于Sysenter的系统调用机制

    发现这种软件中断方法 [int 0x80] 在 Pentium IV 处理器上要慢得多。为了解决这个问题,Linus 实现了一种替代系统调用机制,以利用所有 Pentium II+ 处理器提供的 SYSENTER/SYSEXIT 指令。

  • Linux 内核、4.6 Sysenter 和 vsyscall 页面(2003 年)

    已经观察到,在某些任务上,2 GHz Pentium 4 比 850 MHz Pentium III 慢得多,这种缓慢是由int 0x80Pentium 4 上传统中断的非常大的开销造成的。 i386 系列的某些型号确实如此有更快的方法进入内核。在 Pentium II 上有sysenter说明。AMD 也有syscall说明。