2014-05-21 34 views
1

我正在閱讀關於Linux上的VM處理。顯然要執行一個系統調用,x86上有一個0xFFFFF000的頁面。稱爲vsyscall頁面。過去,調用系統調用的策略是使用int 0x80。這個vsyscall頁面策略仍然使用int 0x80,還是使用不同的調用策略(例如,系統調用操作碼?)。抵押問題:是int 0x80方法過時了嗎?通過vsyscall訪問Linux系統調用策略頁面

+2

查看此答案:http://stackoverflow.com/a/19942352/795910 –

+0

@OtataCampana:謝謝。非常酷的東西。 –

回答

1

如果你在一個現代的Linux二進制運行ldd,你會看到,它的鏈接或叫linux-vdso.1(基於AMD64)一個動態庫linux-gate.so.1(x86上的),它位於該vsyscall頁。這是由內核提供的共享庫,映射到每個進程的地址空間,其中包含C函數,封裝瞭如何執行系統調用的細節。

此封裝的原因是執行系統調用的「首選」方式可能因機器而異。中斷0x80方法應該始終在x86上工作,但最新的處理器支持更有效的sysenter(Intel)或syscall(AMD)指令。您希望程序在可用時使用這些程序,但您也希望在Intel和AMD(以及其他)處理器上運行相同的編譯二進制文件,因此它不應包含特定於供應商的操作碼。該庫將這些處理器特定的決定隱藏在一致的接口後面。請參閱this article