linux - Linux 中的“int 80h”是什么?
问题描述
我想了解我们为什么使用int 80h
它以及在汇编代码中调用它后会发生什么。像这儿:
int 80h
mov eax,1
int 80h
它怎么知道我要调用系统退出,而不仅仅是在eax中保存十进制数?
解决方案
INT
是“中断”的汇编助记符。它后面的代码指定了中断代码。(十进制的 80h/0x80 或 128 是 Unix 系统调用中断)在实模式下运行时(32 位芯片上的 16 位),中断由 BIOS 处理。在操作系统之上运行时,中断由操作系统通过在引导时加载的中断描述符表 (IDT) 处理。
如果 CPU 遇到INT
指令,它将在 BIOS 的 IVT 或 OS 的 IDT 中查找中断,并为该特定中断代码找到附加的处理程序。INT
然后它会跳转到 IDT/IVT 指定的那段代码,开始执行,并在到达处理程序中的特殊指令时跳转回调用的代码IRET
,表示系统已完成执行中断。
一些中断处理程序使用寄存器来了解更多信息,有点像将参数传递给高级语言中的函数。因此,当您写入1
时EAX
,接收您的中断的处理程序将看到它EAX
被设置为1
并知道您想要什么,例如您想要使用的系统资源。
推荐阅读
- excel - VBA Listview 使用列名设置和获取
- c# - 如何保持我的 (.NET Core) 依赖注入配置可维护?
- rust - 参考特征:没有实现 `&T * &T`
- c++ - 如何模拟调用其基类方法的派生类?
- typo3 - TYPO3 CMS 8.7.27:在 null 上调用成员函数 getPackagePath()
- javascript - 如何将带有链接作为类名的跨度转换为链接
- django - 如何保存我的 ForeignKey 的属性?
- python - 不使用 keras 后端库的自定义损失函数
- c - 是否可以在没有线程 0 的情况下运行 omp?
- oracle - 在 oracle 数据建模器(sql-developer)中将 ERD 图命令行导出为 PDF 或 HTML