在 Linux 汇编编程中,int 0x80 是唯一使用的中断号吗?

5

在汇编编程中,我们是否只使用80H来向Linux内核请求服务?

Linux中其他中断号的实用性是什么?

我正在从Windows转换到Linux。


3
你在Windows上使用哪些中断? - jalf
1
这是软件中断,你还需要什么?值得一提的是,在现代计算机上使用syscall/sysenter。 - aliep
1个回答

2

int3(调试断点)和int 80h(旧系统调用)是Linux上常用的两个软件中断。设备驱动程序使用硬件中断,但这些可能不关心您。

话虽如此,在32位系统上,内核为每个进程提供了映射代码以执行系统调用,并且它将自动使用最适当的机制(syscallsysenterint 80h)。由于所有64位系统都支持syscall指令,因此在长模式下通常使用该指令。请注意,64位系统调用号与32位不同。

最后,您通常不会在Linux上使用汇编语言进行系统调用。您要么使用C库,要么完全避免使用系统调用,因为它们很慢,而汇编语言的主要用途之一是提高速度。当然也有例外,比如安全相关的代码或编译器/语言开发。


1
最后一段是错误的。在Linux中,所有的操作都是通过这些系统调用完成的。 - user1129665
32位系统在我看来是不相关的。 - wildplasser
@Brendan 最后一段话在这个问题的上下文中是错误的!我们在讨论汇编程序设计。Linux 对于汇编程序员来说是一个天堂,因为可以通过 int 80h 访问每个操作系统功能。(最后一段话减一分) - johnfound
是的,您可以使用系统调用,但仅仅因为您可以这样做,并不一定意味着这样做是有意义的(只需尝试一些网络编程即可)。我按照Brendan解释的方式维护最后一段(谢谢!)。 - Jester
1
@Gunner 首选,使用高级语言。其次,如果您绝对需要汇编语言,请使用库。汇编语言很繁琐且不可移植,仅在您获得显着优势的部分使用它。 - Jester
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接