Windows内核中的CPU架构-6-中断门(32-Bit Interrupt Gate)

中断门和调用门类似,也是一种系统段。同样的它也可以用来提权。

中断门:

虽然中断门的段描述符如下:

但是中断门其实也就是段描述的一种。只不过有稍微区别,并且和调用门的段描述符类型非常相似。

中断门和调用门的区别:

这里将调用们的段描述符拿来对比下:

可以看到大致的结构是相同的,只不过 高32位的0-4位作为了一种保留位,采用0填充。

而Type位和段描述符中的s位采用了固定的值。其实这个就拿标准段描述符拿来对比就好了。

首先肯定是一个系统段,那么S字段就采用的是0,Type字段用来标记是系统段的哪一个段,根据下图就采用D,12的32-Bit Interrupt Gade段。

除了段描述符的区别,还有段选择子的区别:

中断门的段描述符存放在 idt表里面,前面解析的时候有提过idt和gdt表,两者用起来是一模一样的。

手动实现中断门:

构建中断门

跟前面一样根据段描述符来构建:

高32位:
0-7:
00
8-11:
E
12-15:
E
16-31:
0040


低32:
0-15:
1080
16-31:
0008

得到的段描述符为: 0040EE0000081080

注:这里的配段描述符的过程可以参考前一博客:Windows内核中的CPU架构-5-调用门(32-Bit Call Gate) - Sna1lGo - 博客园 (cnblogs.com)

中的流程。

存放中断门

中断门和调用门类似,我们需要把它的段描述符保存到表里,中断门的表是idt表,所以这里我们首先查看idt表里面的内容:

可以看到这个80b93500这里是空缺的,我们就把内容放到这里把: 

使用中断门:

就首先得明白什么是中断:(百度百科)中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。

其实就是停止当前的操作跳转到自己定义的中断操作里面。有点类似与异常处理了,但是它针对的是CPU的,就CPU才是真正执行代码的硬件,就CPU直接停止当前操作去进行中断操作了。大概这样理解就可以了。

然后执行中断操作采用的是int 指令,然后后面会加一个编号,来标识该中断的段描述符在idt表中的位置。 比如说int 3这个中断指令,我们通过WinDbg来查看下它的段描述符信息:

它的段描述符为 83e7ee00 000086180,然后函数地址是83e76180,函数名称是 KiTrap03

所以我们调用的时候,直接在自己的内联汇编里面采用 int x指令就行。

由于前面我们把自己的中断描述符放到了80b93500的位置,所以通过计算(80b93500-80b93400)/8=20。我们直接采用int 0x20就行了。

还需要注意的是编写中断的函数和普通的函数不一样,不能采用ret和retn,得采用iretd作为返回指令。

使用中断门完整代码:

#include<iostream>
#include<Windows.h>
using namespace std;

void _declspec(naked) test()
{
_asm
{
push eax
mov eax, 0x80b93040
mov eax, [eax]
pop eax
iretd
}
}

int main()
{
printf("%x\n", test);
__asm
{
int 0x20
}
system("pause");
return 0;
}

这样我们的程序就可以美美地在x86系统上运行了。

小结

中断门和调用门比较类似,也是一种用来提权的东西。其核心理念在于Windows对intel CPU的一种利用。中断也是一个常用的计算机术语,其内容也包含了很多,这里就不深入了。任重而道远,大家加油。

Windows内核中的CPU架构-6-中断门(32-Bit Interrupt Gate)的更多相关文章

  1. Windows内核中的CPU架构-7-陷阱门(32-Bit Trap Gate)

    Windows内核中的CPU架构-7-陷阱门(32-Bit Trap Gate) 陷阱门和中断门几乎是一模一样的: (注:图里高32位中的第11位的值为D,其实是1) 除了高32位中的type字段的内 ...

  2. Windows内核中的CPU架构-8-任务段TSS(task state segment)

    Windows内核中的CPU架构-8-任务段TSS(task state segment) 任务段tss(task state segment)是针对于CPU的一个概念. 举一个简单的例子,你一个电脑 ...

  3. 02全志r58平台Android4.4.4下关闭内核中的CPU的开启关闭提示

    02全志r58平台Android4.4.4下关闭内核中的CPU的开启关闭提示 2017/8/18 13:53 版本:V1.0 开发板:SC5806(全志R58平台) SDK:android4.4.4 ...

  4. Windows内核中的内存管理

    内存管理的要点 内核内存是在虚拟地址空间的高2GB位置,且由所有进程所共享,进程进行切换时改变的只是进程的用户分区的内存 驱动程序就像一个特殊的DLL,这个DLL被加载到内核的地址空间中,Driver ...

  5. Windows内核 基本汇编指令

    1)用VS2010新建Win32 Console Application,工程名为ACECore,工程建立完成后得到打开文件ACECore.cpp,代码如下: #include "stdaf ...

  6. Windows内核开发-6-内核机制 Kernel Mechanisms

    Windows内核开发-6-内核机制 Kernel Mechanisms 一部分Windows的内核机制对于驱动开发很有帮助,还有一部分对于内核理解和调试也很有帮助. Interrupt Reques ...

  7. 【windwos 操作系统】关键的Windows内核数据结构一览(上)

    文章作者:r00tk1t 发布时间:2018年01月08日 - 21时56分 最后更新:2020年10月20日 - 21时01分 原始链接:https://r00tk1ts.github.io/201 ...

  8. Windows环境下多线程编程原理与应用读书笔记(3)————Windows环境中的多线程实现(3)

    纤程 纤程(fiber): 相当于用户级别的线程或轻进程.纤程由Win32库函数支持,对核心是不可见的.纤程可以通过SwitchToFiber显示至另一合作纤程,以实现合作纤程之间的协同.线程是在Wi ...

  9. windows内核代码之进程操作

    [toc] 一丶简介 整理一下windows内核中.常用的代码.这里只整理下进程的相关代码. 二丶 windows内核之遍历进程 内核中记录进程的结构体是EPROCESS结构.所以只需要遍历这个结构即 ...

随机推荐

  1. Linux命令进阶篇之二

    实验内容: cat :由第一行开始显示文件内容       tac:由最后一行开始显示,有没有发现和cat是反过来写的       more:一页一页的显示内容       less:与more相似, ...

  2. tomcat URI get 参数中文传到后台 乱码 URIEncoding

    * 修改tomcat server.xml 找到这一行 <Connector connectionTimeout="20000" port="80" pr ...

  3. Winform 窗体自适应

    前言 在使用 Winform 开发过程中,经常发些因为显示器分辨率.窗体大小改变,控件却不能自适应变化,几经查找资料,和大佬的代码.经过细小修改,终于可以让窗体在外界影响下,窗体内背景图片.控件都会自 ...

  4. PaddlePaddle:在 Serverless 架构上十几行代码实现 OCR 能力

    ​ 飞桨 (PaddlePaddle) 以百度多年的深度学习技术研究和业务应用为基础,是中国首个自主研发.功能完备. 开源开放的产业级深度学习平台,集深度学习核心训练和推理框架.基础模型库.端到端开发 ...

  5. 题解 CF961G 【Partitions】

    题目传送门 题目大意 给出\(n,k\),以及\(w_{1,2,..,n}\),定义一个集合\(S\)的权值\(W(S)=|S|\sum_{x\in S} w_x\),定义一个划分\(R\)的权值为\ ...

  6. 北鲲云超算如何让仿真技术、HPC和人工智能之间的深度融合?

    在CAE领域,随着仿真技术在多个行业的深度应用,也带来了仿真模型日益复杂.仿真过程数据倍增.仿真计算费用昂贵等问题,降阶模型.人工智能.云计算等多种技术和仿真技术的深度融合,成为了仿真技术的重要发展趋 ...

  7. linux版火狐浏览器部署详解

    Firefox下载地址 Firefox全历史版本下载: http://ftp.mozilla.org/pub/firefox/releases/ Firefox驱动问题下载  https://gith ...

  8. python编写学习助手0

    项目原因 为了解决学习知识后不及时复习而导致遗忘的问题,准备写一个桌面助手,采用艾宾浩斯记忆法,对每次学习的内容排布复习计划. 第一步是做出最简单的文本列表,里面是待办事项,每个复习待办事项都会有符合 ...

  9. 远程设备管理opendx平台搭建-appium和adb的安装

    多年不见了,说起来也有3年了我又开始写博客了,这几年我还是没啥长进,还是干测试,但是测试行业的话,我已经成了一个测开了,也在搭建自己的测试网站 本系列文章讲述的是一个系列的第一部分,最终可以搭建一整套 ...

  10. vue.$set实现原理

    上源码: export function set (target: Array<any> | Object, key: any, val: any): any { if (process. ...