_dl_sysinfo_int80的目的是什么?

时间:2015-05-15 05:13:57

标签: c gcc assembly x86

我的意思是,为什么不直接发出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只会增加开销。

1 个答案:

答案 0 :(得分:4)

有多种方法可以执行系统调用。最古老,最慢的是int 0x80。优点是它适用于所有系统。后来,英特尔介绍了sysenter并且amd介绍了syscall指令。遗憾的是,这些不兼容,只适用于某些芯片。为了能够使用最佳实现,增加了一个间接级别。内核本身通常提供映射到每个进程(vDSO的一部分)的入口代码。据我所知,_dl_sysinfo_int80只是在内核提供的代码由于某种原因不可用时才被用作后备。