-
2018-11-26 15:11:26
在阅读操作系统概念圣经书导论部分中,学习到了中断和陷阱,同时联系到高级语言中的异常处理,下面我们介绍他们的概念。
陷阱
计算机有两种运行模式:用户态, 内核态。 其中操作系统运行在内核态,在内核态中,操作系统具有对所有硬件的完全访问权限,可以使机器运行任何指令;相反,用户程序运行在用户态,在用户态下,软件只能使用少数指令,它们并不具备直接访问硬件的权限。这就出现了问题,假如软件需要访问硬件或者需要调用内核中的函数该怎么办呢,这就是陷阱的作用了。陷阱指令可以使执行流程从用户态陷入内核(这也就是为什么叫做陷阱,而不是捕猎的陷阱)并把控制权转移给操作系统,使得用户程序可以调用内核函数和使用硬件从而获得操作系统所提供的服务,比如用视频软件放一个电影,视频软件就发出陷阱使用显示器和声卡从而访问硬件。
操作系统有很多系统调用接口供用程序调用。陷阱的发生时间是固定的,比如第一次用视频软件时,在加载视频时软件会向操作系统发送陷阱指令,第二次播放时,软件仍然会在同样的时刻发送陷阱指令。这一点是和中断的明显的差别之一。下面介绍中断。
中断
中断是由外部事件导致并且它发生的时间是不可预测的,这一点和陷阱不同。外部事件主要是指时钟中断,硬件中断等。由于CPU一次只能运行一条指令,所以在一个时刻只能有一个程序运行,但我们感觉在我们的计算机中明明可以同时运行很多程序啊,这是由于CPU在多个进程之间快速切换所导致的伪并行。如果某一个程序运行了足够长用完了分配给它的时间片,CPU决定切换到另一个进程运行,就会产生一个时钟中断,切换到下一个进程运行。
硬件中断顾名思义就是由硬件引起的中断,比如一个程序需要用户输入一个数据,但用户一直没有输入,操作系统决定是一直等待用户输入还是转而运行别的进程,一般情况是转而运行别的进程,如果用户的输入到来了,那么键盘驱动器会产生一个中断通知操作系统,操作系统保存正在运行的程序的状态,从而切换到原来的进程处理到来的数据。
所以中断发生是随机的且主要作用是完成进程间切换,从而支持CPU和设备之间的并行。
中断和异常的另一个重要差别是,CPU处理中断的过程中会屏蔽中断,不接受新的中断直到此次中断处理结束。而陷阱的发生并不屏蔽中断,可以接受新的中断。异常
异常就是程序执行过程中的异常行为。比如除零异常,缓冲区溢出异常等。不同的操作系统定义了不同种类和数量的异常并且每个异常都有一个唯一的异常号,异常会扰乱程序的正常执行流程,所以异常是在CPU执行指令时本身出现的问题,比如除数为零而出现的除零异常。异常的产生表示程序设计不合理,所以在编程的时候要尽量避免异常的产生。
更多相关内容 -
中断和异常,陷阱的区别和联系
2017-02-20 11:05:05中断,异常和陷阱的区别和联系 对CPU来说是 和当前CPU所执行的指令的关系 CPU接下来的事情 程序员和用户的态度 中断 被动的 异步的 没关系 跳转到对应的ISR 希望有对应的中断,...
对于中断,异常和陷阱的各种关系,总结如下:
表 2.1. 中断,异常和陷阱的区别和联系
对CPU来说是 和当前CPU所执行的指令的关系 CPU接下来的事情 程序员和用户的态度 中断 被动的 异步的 没关系 跳转到对应的ISR 希望有对应的中断,以使得CPU可以响应对应的中断,执行对应的ISR 异常 被动的 同步的 有关系,因为就是当前指令执行出问题,才有的异常 跳转到对应的异常处理 不希望出现异常,如果出现了,那往往是指令执行出现某些错误了 陷阱 主动的 同步的 有关系,就是执行当前软中断指令,才进入的软中断 执行对应的软中断处理函数 对于想要实现调试功能的程序员,有需要此陷阱的必要,其他人不用关心此点
下面,用图表总结了,中断,陷阱和异常的区别:
注意 无论是中断,还是异常和陷阱,对应的处理函数,一般都可以称其为中断服务程序ISR,都只是一个函数
具体函数里面要做什么事情,是由你写程序的人决定的
比如中断中处理对应的事情,异常中自己决定如何响应出现的异常,陷阱中决定做什么事情。
-
中断门&陷阱门
2021-04-26 01:05:42陷阱门也和中断门类似调用什么都类似就是构造一样 跟调用门类似,但是不能往里面传参,所以高32位的前4位一定为0,同时TYPE位也有细微的改动,其他的并没有太大的改动。 执行流程 直接int 然后根据编号查IDT表,...中断门,就是通过中断提权的一种手段
下图为中断门的构造
陷阱门也和中断门类似调用什么都类似就是构造不一样
跟调用门类似,但是不能往里面传参,所以高32位的前4位一定为0,同时TYPE位也有细微的改动,其他的并没有太大的改动。
执行流程
直接int 然后根据编号查IDT表,然后IDT表再去查段选择符,然后找到处理的函数,每个编号对应的中断类型都能在官方文档中找到。
构造过程
最基础的构造
#include "stdafx.h" #include <WINDOWS.H> void __declspec(naked) func() { __asm{ iretd; } } int main(void) { printf("%x\n",func); system("pause"); __asm{ push fs; int 0x20;//通过中断直接调用 pop fs; } return 0; }
可以再执行的前后对比下efl,会发现中断门会把其中的IF位置0,也就是屏蔽可屏蔽中断。
中断门和陷阱门唯一的不同也就是置0的不同,陷阱门不会将IF位置0。通过中断门来劫持INT 3
#include "stdafx.h" #include <Windows.h> typedef int (__cdecl *DbgPrintProc)(_In_z_ _Printf_format_string_ const char * _Format, ...); DbgPrintProc DbgPrint = (DbgPrintProc)0x83e5f41f;//uf nt!DbgPrint char *output = "111111"; void __declspec(naked) test() { __asm { sub esp,8; lea eax, change; mov [esp],eax; mov [esp+4],0x8; jmp fword ptr[esp];//修改CS标志位,不修改的话不会蓝屏,会直接崩系统,原地爆炸 change: add esp,8; push fs; push 0x30; pop fs; mov eax,[output]; push eax; call DbgPrint; add esp, 4; pop fs; mov eax,0x83e8f5c0;//跳回原来的INT 3中 jmp eax; } } void _tmain(int argc, _TCHAR* argv[]) { printf("%x\r\n",test); system("pause"); __asm { int 3 }; system("pause"); }
kd> r gdtr gdtr=80b95000 kd> dq 80b95000 80b95000 00000000`00000000 00cf9b00`0000ffff 80b95010 00cf9300`0000ffff 00cffb00`0000ffff 80b95020 00cff300`0000ffff 80008b1e`400020ab 80b95030 834093f7`bc003748 0040f300`00000fff 80b95040 0000f200`0400ffff 7ccf9b57`1a40ffff 80b95050 830089f7`90000068 830089f7`90680068 80b95060 00000000`00000000 00000000`00000000 80b95070 800092b9`500003ff 00000000`00000000 kd> r idtr idtr=80b95400 kd> dq 80b95400 80b95400 83e88e00`0008efc0 83e88e00`008f150 80b95410 83e8ee00`0048f5c0 83e8ee00`0008f5c0 80b95420 83e8ee00`0008f748 83e88e00`0008f8a8 80b95430 83e88e00`0008fa1c 83e98e00`00080018 80b95440 00008500`00500000 83e98e00`00080478 80b95450 83e98e00`0008059c 83e98e00`000806dc 80b95460 83e98e00`0008093c 83e98e00`00080c2c 80b95470 83e98e00`000812fc 83e98e00`000816b0 kd> eq 80b95418 83e8ee00`0048f5c0
这里修改的是INT 3中的段选择子,而段选择子是决定代码开始地址的地方,因此我们修改段选择子指向GDT表中的第10项,再GDT表项中创建第10项,然后第10项大部分复制第2项,只修改其中的基地址,修改为test函数地址减去INT 3中断的代码起始地址,这样基地址根据偏移就会直接去执行我们的test函数,然后再去执行INT 3。
然后实验成功。PS:后面跟了一串不知道啥。不用去管他。TIPS
在中断门内部调用代码的时候,需要使用CLI/STI来屏蔽中断,不进行屏蔽的话,可能在切换进程的时候蓝屏。
-
操作系统中陷阱,中断和异常的区别
2020-10-15 19:23:49在操作系统中,陷阱,中断和异常是常见的术语,它们贯穿操作系统学习的始终,这篇文章主要区分它们之间的不同。 陷阱 计算机有两种运行模式:用户态, 内核态。 其中操作系统运行在内核态,在内核态中,操作系统具有...在操作系统中,陷阱,中断和异常是常见的术语,它们贯穿操作系统学习的始终,这篇文章主要区分它们之间的不同。
陷阱
计算机有两种运行模式:用户态, 内核态。 其中操作系统运行在内核态,在内核态中,操作系统具有对所有硬件的完全访问权限,可以使机器运行任何指令;相反,用户程序运行在用户态,在用户态下,软件只能使用少数指令,它们并不具备直接访问硬件的权限。这就出现了问题,假如软件需要访问硬件或者需要调用内核中的函数该怎么办呢,这就是陷阱的作用了。陷阱指令可以使执行流程从用户态陷入内核(这也就是为什么叫做陷阱,而不是捕猎的陷阱)并把控制权转移给操作系统,使得用户程序可以调用内核函数和使用硬件从而获得操作系统所提供的服务,比如用视频软件放一个电影,视频软件就发出陷阱使用显示器和声卡从而访问硬件。
操作系统有很多系统调用接口供用程序调用。陷阱的发生时间是固定的,比如第一次用视频软件时,在加载视频时软件会向操作系统发送陷阱指令,第二次播放时,软件仍然会在同样的时刻发送陷阱指令。这一点是和中断的明显的差别之一。下面介绍中断。
中断
中断是由外部事件导致并且它发生的时间是不可预测的,这一点和陷阱不同。外部事件主要是指时钟中断,硬件中断等。由于CPU一次只能运行一条指令,所以在一个时刻只能有一个程序运行,但我们感觉在我们的计算机中明明可以同时运行很多程序啊,这是由于CPU在多个进程之间快速切换所导致的伪并行。如果某一个程序运行了足够长用完了分配给它的时间片,CPU决定切换到另一个进程运行,就会产生一个时钟中断,切换到下一个进程运行。
硬件中断顾名思义就是由硬件引起的中断,比如一个程序需要用户输入一个数据,但用户一直没有输入,操作系统决定是一直等待用户输入还是转而运行别的进程,一般情况是转而运行别的进程,如果用户的输入到来了,那么键盘驱动器会产生一个中断通知操作系统,操作系统保存正在运行的程序的状态,从而切换到原来的进程处理到来的数据。
所以中断发生是随机的且主要作用是完成进程间切换,从而支持CPU和设备之间的并行。
中断和异常的另一个重要差别是,CPU处理中断的过程中会屏蔽中断,不接受新的中断直到此次中断处理结束。而陷阱的发生并不屏蔽中断,可以接受新的中断。异常
异常就是程序执行过程中的异常行为。比如除零异常,缓冲区溢出异常等。不同的操作系统定义了不同种类和数量的异常并且每个异常都有一个唯一的异常号,异常会扰乱程序的正常执行流程,所以异常是在CPU执行指令时本身出现的问题,比如除数为零而出现的除零异常。异常的产生表示程序设计不合理,所以在编程的时候要尽量避免异常的产生。
-
中断、陷阱、软中断之间的异同
2016-06-28 15:09:34中断即外中断,指来自处理机和内存外部的中断,包括 I/O 设备发出的 I/O中断、外部信号中断、各种定时器引起的时钟中断以及调试程序中设置的断点等引起的...中断和陷阱的主要区别: 1 、陷阱通常由处理机正在执 -
x86 - 操作系统:中断、陷阱、异常、故障、终止
2021-12-11 20:57:25本文内容:广义分类狭义分类(x86分类)概念 广义的中断概念硬件中断软中断BIOS中断 广义的陷阱概念 优先级 外部中断/中断(Interrupt)非屏蔽中断可屏蔽中断可编程中断控制器8259A高级可编程中断控制器(APIC) ... -
中断和陷阱的区别(转载)
2011-01-06 09:59:00外部中断,就是我们通常所说的中断(interrupt)。对于执行的系统来说,这种中断发生完全是"异步"的,根本无法预测到此类中断会在什么时候发生。因此,CPU(或者软件)对于此类外部中断完全是"被动"的。不过,软件可以... -
中断门、陷阱门、任务段、任务门
2022-02-13 16:46:03中断门描述符 中断门概述 1.系统调用 Windows没有使用调用门,但是使用了中断门...中断门和调用门很相似他们最大的区别是查表的不同, 调用门是使用的GDT表而中断门使用的是IDT表。 IDT表概述 IDT全名中断描述符表, -
异常、中断、陷阱
2019-09-30 23:38:46就研究了一下中断的分类,还有异常和陷阱。下面是我百度之后的一些总结: 中断的分类:外中断和内中断 根据系统对中断处理的需要,操作系统一般对中断进行分类并对不同的中断赋予不同的处理优先级,以便在不同的... -
中断,陷阱,异常的区别
2020-02-08 16:04:32中断,由硬件产生,比如时钟中断 陷阱,由软件故意产生的,比如系统调用 异常,软件运行过程中产生,比如除零,缺页异常 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想... -
陷阱,中断和异常
2020-08-19 10:04:48在操作系统中,陷阱,中断和异常是常见的术语,它们贯穿操作系统学习的始终,这篇文章主要区分它们之间的不同。 陷阱 计算机有两种运行模式:用户态, 内核态。 其中操作系统运行在内核态,在内核态中,操作系统... -
1.4 windows内核——中断门,陷阱门,任务门
2021-10-12 19:47:36TSS任务状态段 一个内核一个...陷阱门 陷阱门描述符 与中断门的区别:中断门执行时,将IFLAG中的IF位清零,但陷阱门不会 3.任务门 为异常INT提供了可切换任务的机制,是一种被动的机制,而单纯的任务段必须被主动调用。 -
内中断,外中断,软中断,硬中断,异常,陷阱
2022-03-03 20:40:59不管是内中断,外中断,软中断还是硬中断都是按照中断源来划分的。 一、外中断 狭义上的中断(interruption)指的就是外中断。 指来自CPU执行指令以外的事件的发生,希望处理机能够向设备发下一个输入/输出请求,同时... -
操作系统—陷阱、中断、异常
2020-09-07 16:13:45陷阱 计算机有两种运行模式:用户态, 内核态。 其中操作系统运行在内核态,在内核态中,操作系统具有对所有硬件的完全访问权限,可以使机器运行任何指令;相反,用户程序运行在用户态,在用户态下,软件只能使用... -
中断,异常,陷阱 概念
2018-07-17 22:19:36中断:为了设备与CPU之间的异步通信。是由设备向CPU发的信号。典型的有如服务请求,任务完成提醒等。比如我们熟知的时钟中断,硬盘读写服务请求中断。 中断的发生与系统处在用户态还是在内核态无关,只决定于... -
任务门、中断门、陷阱门和调用门
2017-11-12 19:36:00任务门、中断门、陷阱门和调用门的结构图 1.任务门结构图如下所示: 阴影部分表示空闲不用;P标志位,为1时表示在内存中;DPL描述优先级别;类型码101表示任务门。 2.中断门、陷阱门和调用门结构图如下所示: ... -
异常 中断 陷阱
2020-01-23 15:30:31就研究了一下中断的分类,还有异常和陷阱。下面是我百度之后的一些总结: 中断的分类:外中断和内中中断 根据系统对中断处理的需要,操作系统一般对中断进行分类并对不同的中断赋予不同的处理优先级,以便在不同... -
浅析arm的异常、中断和arm工作模式的联系
2020-07-13 20:50:16说到异常向量,会让人联想到中断向量。其实,中断是属于异常的子集的,也就是说中断其实是异常其中的一种。 -
中断 陷阱 软中断
2014-08-16 21:20:44中断即外中断,指来自处理机和内存外部的中断,包括 I/O 设备发出的 I/O中断、外部信号中断、各种定时器引起的时钟中断以及...中断和陷阱的主要区别: 1 、陷阱通常由处理机正在执行的现行指令引起,而中断则是由与 -
硬件中断与软件中断的区别
2019-11-21 09:52:01中断指当出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程。即在程序运行过程中,系统出现了一个必须由CPU立即处理的情况,此时,CPU暂时中止程序的执行转而处理这个新的情况的过程就叫做... -
操作系统的中断,陷阱,异常
2018-11-07 15:52:51陷阱 计算机有两种运行模式:用户态, 内核态。 其中操作系统运行在内核态,在内核态中,操作系统具有对所有硬件的完全访问权限,可以使机器运行任何指令;相反,用户程序运行在用户态,在用户态下,软件只能使用... -
中断、异常、和系统调用的区别总结
2018-06-14 21:34:09中断、异常、和系统调用在OS和计算机组成原理中都经常被提到,很难区分,并且不同版本的教材往往有不同的说法。这里主要采用《CSAPP》中的说法区分一下中断、异常、和系统调用。 主要内容如下: 术语说明 异常流 ... -
一个操作系统的实现–中断门
2021-01-20 14:53:31中断门与其他三个门(调用门、陷阱门、任务门)一起是操作系统里的四扇门。它们之间的区别以后再补充,重点分析中断门。 那么什么是门呢?门其实是一中描述符,直观来看这个描述符描述了由一个选择子和一个... -
【OS学习笔记】三十五 保护模式十:中断描述符表、中断门和陷阱门
2018-12-18 12:07:31上一篇文章学习了中断与异常的概念:【OS学习笔记】三十四 保护模式十:中断和异常区别 本片文章接着学习以下内容: 中断描述符表 中断门 陷阱门 1 中断描述符表 我们前面讲了无数次,在实模式下,是由位于低地址... -
操作系统之陷阱,中断和异常
2022-01-01 19:55:29在操作系统中,陷阱,中断和异常是常见的术语,它们贯穿操作系统学习的始终,这篇文章主要区分它们之间的不同。 陷阱 计算机有两种运行模式:用户态, 内核态。 其中操作系统运行在内核态,在内核态中,操作系统具有... -
在写ROS发布者发布话题时遇到错误:追踪与中断点陷阱 (核心已转储)
2020-11-21 17:47:59on a publisher with type [nav_msgs/Odometry/cd5e73d190d741a2f92e81eda573aca7] [FATAL] [1605951396.917113089]: 追踪与中断点陷阱 (核心已转储) acl@ubuntu:~/depth_ws$ 如下所示: 问题原因: 去源文件里看...