我的意思是,为什么不直接发出int指令?

Dump of assembler code for function execve:
   [omitted]
   0x0806c282 <+18>:    call   *0x80e99f0
   [omitted]
End of assembler dump.
(gdb) disas *0x80e99f0
Dump of assembler code for function _dl_sysinfo_int80:
   0x0806ed70 <+0>: int    $0x80
   0x0806ed72 <+2>: ret
End of assembler dump.


从我的经验不足的角度来看,_dl_sysinfo_int80除了开销外什么都没有添加。

最佳答案

有多种方法可以执行系统调用。最老,最慢的是int 0x80。优点是它可以在所有系统上运行。后来,intel引入了sysenter,而amd引入了syscall指令。不幸的是,它们不兼容,并且只能在某些芯片上工作。为了可以使用最佳实现,已添加了间接级别。内核本身通常提供映射到每个进程(vDSO的一部分)的入口代码。据我所知,当该内核提供的代码由于某种原因不可用时,_dl_sysinfo_int80仅用作备用。

08-24 13:27