如何解决在Linux中什么是“ int 80h”?
我想了解为什么我们使用int 80h
以及在汇编代码中调用它后会发生什么。就像这里:
int 80h
mov eax,1
int 80h
它怎么知道我想调用系统出口,而不仅仅是在eax中保存小数?
解决方法
INT
是“中断”的程序集助记符。后面的代码指定了中断代码。 (Unix系统调用中断是80h / 0x80或十进制的128)在实模式(32位芯片上为16位)上运行时,中断由BIOS处理。在操作系统之上运行时,操作系统将通过在启动时加载的中断描述符表(IDT)处理中断。
如果CPU遇到一条INT
指令,它将在BIOS的IVT或OS的IDT中查找中断,并为该特定中断代码找到附加的处理程序。然后它将跳转到IDT / IVT指定的那段代码,开始执行,并在到达处理程序中的特殊指令INT
时跳回到调用IRET
的代码,表示系统执行完中断。
某些中断处理程序使用寄存器来了解更多信息,就像将参数传递给高级语言一样。因此,当您将1
写入EAX
时,接收到中断的处理程序将看到EAX
设置为1
并了解所需的内容,例如您要使用的系统资源。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。