HOOK IDT频繁蓝屏(Window 正确 HOOK IDT)
环境 win7x64 Microsoft Windows [版本 6.1.7601]
也是一个朋友 HOOK IDT 测试 问我IDT为啥老是蓝屏。结果是因为swapgs问题。 如果你知道swapgs作用。或者 在IDT swapgs起到的作用 就不用往下看了。
给我朋友解释了 结果他还是不理解。。。所以写个文章吧。 希望可以帮到其他朋友
我们先来分析下IDT的函数开发
图1

图2

图3

图1 是 KiDebugTrapOrFault 函数头内容 IDT 0x1
图2 是 KiBreakpointTrap 函数头内容 IDT 0x3
图3 是 KiPageFault 函数头内容 IDT 0x0E
我们通过对比可以发现 函数头是一样的。
nt!KiPageFault:
    fffff800`03e77a00 55              push    rbp
    fffff800`03e77a01 4881ec58010000  sub     rsp,158h
    fffff800`03e77a08 488dac2480000000 lea     rbp,[rsp+80h]
    fffff800`03e77a10 c645ab01        mov     byte ptr [rbp-55h],1
    fffff800`03e77a14 488945b0        mov     qword ptr [rbp-50h],rax
    fffff800`03e77a18 48894db8        mov     qword ptr [rbp-48h],rcx
    fffff800`03e77a1c 488955c0        mov     qword ptr [rbp-40h],rdx
    fffff800`03e77a20 4c8945c8        mov     qword ptr [rbp-38h],r8
    fffff800`03e77a24 4c894dd0        mov     qword ptr [rbp-30h],r9
    fffff800`03e77a28 4c8955d8        mov     qword ptr [rbp-28h],r10
    fffff800`03e77a2c 4c895de0        mov     qword ptr [rbp-20h],r11
    fffff800`03e77a30 f685f000000001  test    byte ptr [rbp+0F0h],1   这里进行了判断   如果等于1 则跳转 不需要执行swapgs
    fffff800`03e77a37 7474            je      nt!KiPageFault+0xad (fffff800`03e77aad)
    fffff800`03e77a39 0f01f8          swapgs
swapgs的作用是交换gs段基址 我们知道。在R3下 GS指向的是 TEB环境块(x86 是fs) 在R0下 GS指向 _KPCRB 当前CPU结构.
因此当R3触发了IDT中断的时候需要切换gs 才能继续执行。否则就会导致我们亲爱的 蓝大妈。 原理就是这样。
那么我们HOOK IDT的时候。聪明的人应该已经想到 我们也需要使用函数头 下面是一个简单的 HOOK PageFault例子(IDT 0xE)
CODE
DebugTrap proc
push rbp
sub rsp,158h
lea rbp,[rsp+80h]
test byte ptr [rbp+0F0h],1
je LabelKernel
swapgs
LabelKernel:
.......... //这里就是你自定义的一些代码
test byte ptr [rbp+0F0h],1
je LabelKernelEnd
swapgs
LabelKernelEnd:
add rsp,158h
pop rbp
DebugTrap endp
END
好了。到此结束。。祝大家好运 Good Luck.
狂客原创,转载请注明。侵权必究 作者:狂客 QQ:214109721
HOOK IDT频繁蓝屏(Window 正确 HOOK IDT)的更多相关文章
- Windows Server 2012 R2蓝屏
		最近发现某个医院客户Windows Server 2012 R2 DataCenter的系统频繁蓝屏重启,重启没过一天再一次出现,反反复复折腾好几天,提示信息ntoskrnl.exe.mssmbios ... 
- 【转载】Window服务器开机后一直处于蓝色屏幕(非蓝屏 crash)状态
		阿里云Windows系统服务器运维的过程中,有时候会遇到实例开机后一直处于蓝色背景屏幕(非蓝屏 crash )状态.此时你发现鼠标可以任意正常移动,但是屏幕上却没有任何的图标可以供操作,这种情况可能是 ... 
- 分析Windows的死亡蓝屏(BSOD)机制
		这篇文章本来是投Freebuf的,结果没过.就贴到博客里吧,图懒得发上来了 对于Windows系统来说,被人们视为洪水猛兽的蓝屏也是一种有利于系统稳定的机制.蓝屏其实是Windows系 统的一种自查机 ... 
- windows蓝屏错误小全
		作者:siyizhu 日期:2005-11-27 字体大小: 小 中 大 引用内容 0 0x00000000 作业完成. 1 0x00000001 不正确的函数. 2 0x00000002 系统 ... 
- TsFltMgr.sys系统蓝屏的原因就在于QQ电脑管家!
		同事一WindowsXP系统,正常执行,关闭后,第二天无法启动,详细症状为: (1)安全模式以及带网络功能的安全模式都能够进入: (2)正常模式,还没出现WindowXP滚动栏就開始重新启动: (3) ... 
- TsFltMgr.sys其原因是,该系统蓝屏QQ计算机管理器!
		同事一WindowsXP系统,正常执行,关闭后,第二天无法启动.详细症状为: (1)安全模式以及带网络功能的安全模式都能够进入. (2)正常模式.还没出现WindowXP滚动栏就開始重新启动: (3) ... 
- map 后 PE 蓝屏原因专题讨论(e820cycles参数)
		map 后 PE 蓝屏原因专题讨论(e820cycles参数)http://bbs.znpc.net/thread-6182-1-5.html不点发表于 2011-12-8 11:42:31 大家知道 ... 
- windows蓝屏代码大全及常见蓝屏解决方案
		对于以下的代码查询建议使用ctrl+F查询,而且很多蓝屏与黑屏的问题多是最近操作引起的,例如更新驱动,安装新的硬件.软件--把相关的配置调到最近的正常状况大多可以解决,确实不行时方可考虑重装系统,解决 ... 
- Windows常见蓝屏故障分析
		转自Windows常见蓝屏故障分析 症状描述: 当您在运行Microsoft Windows 2000/XP/Server 2003.Microsoft Windows Vista/Server 20 ... 
随机推荐
- Hadoop2.2.0集群的HA高可靠的最简单配置
			HA集群需要使用nameservice ID区分一个HDFS集群.另外,HA中还要使用一个词,叫做NameNode ID.同一个集群中的不同NameNode,使用不同的NameNode ID区分.为了 ... 
- uploadify Cookie 验证登入上传问题
			上传文件时必须验证是否已登入. 当用FormsAuthentication做登入,使用FormsAuthentication.FormsCookieName进行验证是否已登入即可. <scrip ... 
- poj3616 Milking Time(状态转移方程,类似LIS)
			https://vjudge.net/problem/POJ-3616 猛刷简单dp的第一天第二题. 这道题乍一看跟背包很像,不同的在于它是一个区间,背包是定点,试了很久想往背包上套,都没成功. 这题 ... 
- adb devices 找不到设备的解决方法
			1.开启adb 2.查看设备时的报错 问题1:cannot connect to daemon 解决方法:找到占据5037端口的进城,并在“任务管理器”中依据“PID”查找到,解决进程 问题2:手机 ... 
- 超过 130 个你需要了解的 vim 命令
			从 1970 年开始,vi 和 vim 就成为了程序员最喜爱的文本编辑器之一.5年前,我写了一个问自己名为 “每个程序员都应该知道的 100 个 vim 命令” 这次算是之前那篇文章的改进版,希望你会 ... 
- C# MemoryCache GCHandle
			MemoryCache在项目中用了很久,感觉比较简单,以前也看过里面的源代码,主要借用MemoryCacheStore来完成数据的存储,里面是线程安全的,MemoryCacheStore借用Hasht ... 
- Visual Studio进行Web性能测试- Part II
			Visual Studio进行Web性能测试- Part II 2012-08-31 14:34 by 知平软件, 7557 阅读, 5 评论, 收藏, 编辑 原文作者:Ambily.raj 对于一个 ... 
- Jenkins持续集成 入门实践
			本文测试环境: ASP.NET MVC项目,Windows 7环境,SVN代码仓库, MSBuild,TortoiseSVN 持续集成这种工具很多了,Jenkins比较常用,他的原理就是一个服务,有一 ... 
- Windows下安装模块mysqlclient报错处理
			Windows环境下使用pip命令安装Python模块mysqlclientpip install mysqlclient安装过程报错 [error] Microsoft Visual C++ 14 ... 
- 2D空间的OBB碰撞实现
			OBB全称Oriented bounding box,方向包围盒算法.其表现效果和Unity的BoxCollider并无二致.由于3D空间的OBB需要多考虑一些情况 这里仅关注2D空间下的OBB. 实 ... 
