所有教科书和互联网资源告诉我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