【发布时间】:2012-09-30 04:06:26
【问题描述】:
我研究了 Linux 内核,发现对于 x86_64 架构,中断int 0x80 不适用于调用系统调用1。
对于 i386 架构(32 位 x86 用户空间),更可取的是:syscall 或 int 0x80,为什么?
我使用 Linux 内核版本 3.4。
脚注 1:int 0x80 在某些情况下确实适用于 64 位代码,但从不推荐。 What happens if you use the 32-bit int 0x80 Linux ABI in 64-bit code?
【问题讨论】:
-
您在内核中的哪个位置看到
int 0x80的使用?你能指定一些文件吗? -
@Mike 实际上,我找到了一种关于 linux 内核的教程,并以它为例。它基于 2.6。
-
我认为
int 0x80直接在x86-64内核上工作是为了向后兼容。而且Intel手册上说syscall在32位模式下无效。 -
补充 self: syscall 仅在 Intel 实现中无效,AMD 无效:stackoverflow.com/questions/29783896/…
标签: linux assembly x86 system-calls 32-bit