2015-05-15 222 views
3

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

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只增加了开销。

回答

4

有多种方式可以执行系统调用。最古老和最慢的是int 0x80。优点是它可以在所有系统上运行。后来英特尔推出了sysenter,并引入了syscall指令。不幸的是,这些不兼容,只能在某些芯片上工作。为了能够使用最好的实现,增加了一个间接级别。内核本身通常提供映射到每个进程的入口代码(部分vDSO)。据我所知,_dl_sysinfo_int80只是作为回退,当内核提供的代码由于某种原因不可用。