- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
所有教科书和 Internet 资源都告诉我 int 80h 是调用系统调用的陈旧样式,在 x86 平台上已被 SYSENTER 取代。
但我刚刚发现我的系统仍然使用 int 80h。我知道 VDSO、实现系统调用服务的 libc 包装器等教科书内容,但不明白为什么默认仍使用 int 80h。
谁能告诉我原因? glibc 或内核太旧?
现在什么情况下“int 80h”仍然默认使用?
如何在不安装新 glibc 的情况下执行 sysenter?
下面是我的环境:
我在我的 macbook air 2011(Core Duo CPU)上安装了一个使用 VMWare 的虚拟机。VM中32位Ubuntu 8.04/kernel 2.6.24(使用原来的.config编译)/libc 2.7。
最佳答案
很可能是出于兼容性原因——32 位 Ubuntu 被编译为兼容 i386 处理器(好吧,现在可能不是那么旧),它不支持 sysenter(它只出现在 Pentium 2 AFAIK 上)。显然,针对 int 80h 使用 sysenter 仅对某些类型的处理器真正有益:
http://articles.manugarg.com/systemcallinlinux2_6.html
因此,如果在一般情况下没有显着的速度提升和更广泛的兼容性,即使在今天,在 sysenter 上使用 int 80h 仍然有意义。如果您使用 64 位版本的 Ubuntu,那么到处都使用 sysenter/sysexit。
编辑:实际上要使用的系统调用机制是由内核在启动时决定的,而不是由 glibc 决定的。 This page (第 4.6 节)解释了这是如何很好地工作的。在您的情况下,内核认为 VMware 模拟的硬件使用 int 80h 而不是 sysenter 效率更高。您必须调试内核才能弄清楚它是如何做出该决定的。
关于ubuntu - 为什么使用 int80h 而不是 sysenter 来调用系统调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9136028/
如何编写发出特定于体系结构的系统调用指令所需的 LLVM 位码? 更具体地说,clang 支持内联汇编,并且明确支持发出系统调用(否则无法编译 libc 和 vdso)。翻译是如何为此工作的,我怎样才
如果 Windows 可执行文件使用 SYSENTER 并在实现 AMD64 ISA 的处理器上执行,会发生什么?我对这个主题(操作系统、硬件/软件交互)既是新手又是新手,但从我读过的内容来看,我了解
我正在研究 CPU 如何在 Linux 中从用户模式切换到内核模式。我遇到了两种不同的方法:中断和使用 sysenter。 我不明白 sysenter 是如何工作的。有人能解释一下当 sysenter
所有教科书和 Internet 资源都告诉我 int 80h 是调用系统调用的陈旧样式,在 x86 平台上已被 SYSENTER 取代。 但我刚刚发现我的系统仍然使用 int 80h。我知道 VDSO
我正在尝试编写一些程序来直接调用系统调用而无需通过 ntdll.dll 我的代码(Visual Studio 语法...): #include int main() { _asm{
旧的linux版本使用“int 0x80”指令来实现系统调用,后来的版本使用“SYSENTER/SYSEXIT”指令来实现。 通过“int 0x80”传输到ring 0后,cpu处于中断上下文中,中断
在 x86 Linux 中如何直接使用 sysenter/syscall 实现系统调用?有人可以提供帮助吗?如果能把amd64平台的代码也展示一下就更好了。 我知道在 x86 中,我们可以使用 __a
我正在尝试完成将 ELF 二进制文件转换为虚拟机的项目,以提供一个进程自己的执行环境,类似于 http://dune.scs.stanford.edu/ .许多论文都说“我们检测系统调用......”
是否可以在 Linux 上的 64 位程序中使用 sysenter?或者是否不可能在不让其他动态链接库崩溃的情况下将 sysenter 的使用与 SystemⅤ 调用约定相适应 (我知道 32 位方式
是否可以强制 gcc 对所有系统调用使用 int 指令,而不是 sysenter?这个问题听起来可能很奇怪,但我必须以这种方式编译一些项目,如 Python 和 Firefox。 总结 感谢 jbcr
从 MS‑DOS 开始,我就知道使用中断进行系统调用。在旧论文中,我看到引用 int 80h 来调用 Linux 上的系统函数。很长一段时间以来,我知道 int 80h 已被弃用,取而代之的是 sys
我是一名优秀的程序员,十分优秀!