我研究了Linux内核,发现对于x86_64体系 struct ,中断int 0x80不适用于调用系统调用1.

For the i386 architecture (32-bit x86 user-space), what is more preferable: 100 or 101 and why?

我使用Linux内核版本3.4.


脚注1:int 0x80在某些情况下适用于64位代码,但不推荐使用.What happens if you use the 32-bit int 0x80 Linux ABI in 64-bit code?

推荐答案

  • syscall是在x86-64上进入内核模式的默认方式.此指令在32位操作模式on Intel processors中不可用.
  • sysenter是一条最常用于在32位操作模式下调用系统调用的指令.它与syscall类似,虽然使用起来有点困难,但这是内核所关心的.
  • int 0x80是调用系统调用的传统方式,应该避免使用.

调用系统调用的首选方法是使用vDSO,这是映射到每个进程地址空间的内存的一部分,允许更有效地使用系统调用(例如,在某些情况下根本不进入内核模式).与传统的int 0x80方式相比,vDSO还处理更困难的syscallsysenter指令.

另外,请参见thisthis.

Linux相关问答推荐

使用ms宏将PIC图像放置在页面的任意位置

如何在 shell 脚本中自定义 SFTP 详细输出

如何使用适用于 Linux 的 Dockerized SQL Server 设置 MSDTC

使用 sed 或 awk 格式化文本

如何在 gcc 搜索路径上防止多个版本的 Boost?

在 bash 中获取目录或文件的基本名称的快速且正确的方法

Azure Nvidia 中的 apt-update 给出公钥错误

为什么 Linux (x86) 的页面大小是 4 KB,这是如何计算的?

通过 Linux FrameBuffer 将像素绘制到屏幕上

模拟器在内核映像文件中找不到Linux 版本字符串

如何在 Ubuntu 12.04 中更改 Jenkins 安装的端口号

Mac OS X 中的 ldconfig 等效项?

*nix 系统上是否有与 COM 等效的功能?如果不是,那么 *nix 的可重用性方法是什么?

试运行 cron 条目

rename() 是原子的吗?

使用 SED 将单词的首字母大写

网络共享文件夹上的 GIT 存储库中的并发性

如何停止 Linux 上的不间断进程?

适用于 Windows、Linux、MacOS X 的跨平台脚​​本

编辑文件时保留 samba 共享的文件权限