一尘不染

在Linux上的32位代码中,哪个更好的“ int 0x80”或“ syscall”更好?

linux

我研究了Linux内核,发现对于x86_64体系结构,中断int 0x80不适用于调用系统调用1。

对于i386体系结构(32位x86用户空间),更可取的是:syscall或者int 0x80为什么?

我使用Linux内核版本3.4。


脚注1:int 0x80在某些情况下确实可以在64位代码中工作,但是从不建议这样做。


阅读 581

收藏
2020-06-02

共1个答案

一尘不染

  • syscall是在上进入内核模式的默认方法x86-64。该指令 在Intel处理器的 32位操作模式下不可用。
  • sysenter是最常用于以32位操作模式调用系统调用的指令。它类似于syscall,但是使用起来有点困难,但这是内核的关注点。
  • int 0x80 是调用系统调用的传统方式,应避免使用。

调用系统调用的首选方法是使用VDSO,VDSO是映射在每个进程地址空间中的一部分内存,可以更有效地使用系统调用(例如,在某些情况下完全不进入内核模式)。与传统int 0x80方式相比,VDSO还要处理更困难的事情syscallsysenter指令。

另外,请参阅

2020-06-02