2015-05-15 2 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. Преимущество заключается в том, что он работает на всех системах. Позже, Intel представила sysenter и amd представила инструкцию syscall. К сожалению, они несовместимы и работают только с некоторыми фишками. Чтобы можно было использовать наилучшую реализацию, был добавлен уровень косвенности. Ядро, как правило, предоставляет код входа, отображаемый в каждом процессе (часть vDSO). Насколько я могу судить, _dl_sysinfo_int80 просто используется как резерв, когда код, предоставленный ядром, по какой-то причине недоступен.

Смежные вопросы