2015-05-15 134 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只是作爲回退,當內核提供的代碼由於某種原因不可用。