【发布时间】:2012-02-26 12:09:11
【问题描述】:
所有的教科书和 Internet 资源都告诉我 int 80h 是一种用于调用系统调用的陈旧风格,在 x86 平台上已被 SYSENTER 取代。
但我刚刚发现我的系统仍然使用 int 80h。我知道像VDSO,实现系统调用服务的libc包装器之类的教科书内容,但不明白为什么默认情况下仍然使用int 80h。
谁能告诉我原因? glibc 还是内核太旧?
现在在什么情况下仍默认使用“int 80h”?
如何在不安装新 glibc 的情况下强制执行 sysenter?
下面是我的环境:
我在我的 macbook air 2011(Core Duo CPU)上使用 VMWare 安装了一个虚拟机。 虚拟机中的 32 位 Ubuntu 8.04/kernel 2.6.24(使用原始 .config 编译)/libc 2.7。
【问题讨论】:
-
Here 是关于如何确定系统中使用 int 80h 和 sysenter 的哪种机制的一个很好的链接。但这并不能解决我的惊讶,我的系统仍然使用 int 80h。我只是 gdb-ed 一个可执行文件,发现“int 80h”实际上是用 glibc 编码的。也就是在我的情况下,没有使用内核提供的VDSO。
-
经过一番调查,我确信内核确实提供了 vsyscall 页面。只是glibc被配置为直接使用int 80h。我想这是为 8.04 版本配置这种 libc 的 Ubuntu 人员的选择。
标签: ubuntu linux-kernel system-calls