首页 > 解决方案 > Linux 中的“int 80h”是什么?

问题描述

我想了解我们为什么使用int 80h它以及在汇编代码中调用它后会发生什么。像这儿:

int 80h
mov eax,1
int 80h

它怎么知道我要调用系统退出,而不仅仅是在eax中保存十进制数?

标签: linuxassemblylinux-kernelx86system-calls

解决方案


INT是“中断”的汇编助记符。它后面的代码指定了中断代码。(十进制的 80h/0x80 或 128 是 Unix 系统调用中断)在实模式下运行时(32 位芯片上的 16 位),中断由 BIOS 处理。在操作系统之上运行时,中断由操作系统通过在引导时加载的中断描述符表 (IDT) 处理。

如果 CPU 遇到INT指令,它将在 BIOS 的 IVT 或 OS 的 IDT 中查找中断,并为该特定中断代码找到附加的处理程序。INT然后它会跳转到 IDT/IVT 指定的那段代码,开始执行,并在到达处理程序中的特殊指令时跳转回调用的代码IRET,表示系统已完成执行中断。

一些中断处理程序使用寄存器来了解更多信息,有点像将参数传递给高级语言中的函数。因此,当您写入1EAX,接收您的中断的处理程序将看到它EAX被设置为1并知道您想要什么,例如您想要使用的系统资源。


推荐阅读