所有教科書和互聯網資源告訴我int 80h是調用系統調用的陳舊風格,並已被x86平臺上的SYSENTER所取代。爲什麼用int80h代替sysenter來調用系統調用?
但我剛剛發現我的系統仍然使用int 80h。我知道教科書的東西像VDSO,實現系統調用服務的libc包裝,但不明白爲什麼int 80h仍然默認使用。
有人可以告訴我原因嗎? glibc或內核太舊了?
時下在什麼條件下默認仍然使用「int 80h」?
如何在不安裝新的glibc的情況下執行sysenter?
下面是我的環境:
我安裝使用VMWare虛擬機上我的MacBook Air 2011(酷睿雙核CPU)。 VM中的32位Ubuntu 8.04/kernel 2.6.24(使用原始.config編譯)/ libc 2.7。
[這裏](http://stackoverflow.com/questions/2747187/how-to-find-which-type-of-system-call-is-used-by-a-program)是一個很好的鏈接如何確定在系統中使用int 80h和sysenter的機制。但它並不能解決我的驚訝,我的系統仍然使用int 80h。我只是gdb-ed一個可執行文件,發現「int 80h」實際上是用glibc編碼的。就我而言,內核提供的VDSO不被使用。 – Infinite 2012-02-03 22:50:11
經過一番調查後,我確信內核確實提供了vsyscall頁面。只是glibc被配置爲直接使用int 80h。我想這是爲8.04版本配置這種libc的Ubuntu用戶的選擇。 – Infinite 2012-02-03 23:54:04