环境 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)的更多相关文章

  1. Windows Server 2012 R2蓝屏

    最近发现某个医院客户Windows Server 2012 R2 DataCenter的系统频繁蓝屏重启,重启没过一天再一次出现,反反复复折腾好几天,提示信息ntoskrnl.exe.mssmbios ...

  2. 【转载】Window服务器开机后一直处于蓝色屏幕(非蓝屏 crash)状态

    阿里云Windows系统服务器运维的过程中,有时候会遇到实例开机后一直处于蓝色背景屏幕(非蓝屏 crash )状态.此时你发现鼠标可以任意正常移动,但是屏幕上却没有任何的图标可以供操作,这种情况可能是 ...

  3. 分析Windows的死亡蓝屏(BSOD)机制

    这篇文章本来是投Freebuf的,结果没过.就贴到博客里吧,图懒得发上来了 对于Windows系统来说,被人们视为洪水猛兽的蓝屏也是一种有利于系统稳定的机制.蓝屏其实是Windows系 统的一种自查机 ...

  4. windows蓝屏错误小全

    作者:siyizhu 日期:2005-11-27 字体大小: 小 中 大  引用内容 0 0x00000000 作业完成.  1 0x00000001 不正确的函数.  2 0x00000002 系统 ...

  5. TsFltMgr.sys系统蓝屏的原因就在于QQ电脑管家!

    同事一WindowsXP系统,正常执行,关闭后,第二天无法启动,详细症状为: (1)安全模式以及带网络功能的安全模式都能够进入: (2)正常模式,还没出现WindowXP滚动栏就開始重新启动: (3) ...

  6. TsFltMgr.sys其原因是,该系统蓝屏QQ计算机管理器!

    同事一WindowsXP系统,正常执行,关闭后,第二天无法启动.详细症状为: (1)安全模式以及带网络功能的安全模式都能够进入. (2)正常模式.还没出现WindowXP滚动栏就開始重新启动: (3) ...

  7. map 后 PE 蓝屏原因专题讨论(e820cycles参数)

    map 后 PE 蓝屏原因专题讨论(e820cycles参数)http://bbs.znpc.net/thread-6182-1-5.html不点发表于 2011-12-8 11:42:31 大家知道 ...

  8. windows蓝屏代码大全及常见蓝屏解决方案

    对于以下的代码查询建议使用ctrl+F查询,而且很多蓝屏与黑屏的问题多是最近操作引起的,例如更新驱动,安装新的硬件.软件--把相关的配置调到最近的正常状况大多可以解决,确实不行时方可考虑重装系统,解决 ...

  9. Windows常见蓝屏故障分析

    转自Windows常见蓝屏故障分析 症状描述: 当您在运行Microsoft Windows 2000/XP/Server 2003.Microsoft Windows Vista/Server 20 ...

随机推荐

  1. Python中将array类型不按科学计数法存在文件中的方法

    直接上代码: from numpy import *import numpy as npDrug_array = zeros((708,708),dtype = int)f = open('D:\ma ...

  2. python之进程和线程3

    1 multiprocessing模块 (1.)直接导入 from multiprocessing import Process import os import time def info(name ...

  3. 介绍三款串口监控工具:Device Monitoring Studio,portmon,Comspy

    在开发上位机下位机通讯程序时,有一个好的监控工具会事半功倍.特在网上找了几款串口监控软件,作了简单对比: 一.Device Monitoring Studio 网址:http://www.hhdsof ...

  4. Unity项目中文字的统一管理

    一款游戏在研发初期就需要考虑多语言的问题,否则后期在进行多国语言版本时就面临着巨大的成本.鉴于之前页游的经验,其它同事设计出读取Excel的方式来管理所有的文字.但是我在使用中发现很致使的一个问题,当 ...

  5. SpringBoot(十):读取application.yml下配置参数信息,java -jar启动时项目修改参数

    读取application.yml下配置参数信息 在application.yml文件内容 my: remote-address: 192.168.1.1 yarn: weburl: http://1 ...

  6. Javascript Module pattern template. Shows a class with a constructor and public/private methods/properties. Also shows compatibility with CommonJS(eg Node.JS) and AMD (eg requireJS) as well as in a br

    /** * Created with JetBrains PhpStorm. * User: scotty * Date: 28/08/2013 * Time: 19:39 */ ;(function ...

  7. Centos7中离线安装DockerCE最新版

    一.简述 离线在Centos7中部署DockerCE. 二.步骤 (1)在有外网的计算A上执行: 1.配置安装源存放路径 mkdir -p /root/docker-ce-local &&am ...

  8. 【Linux】关于ffmpeg的一些常见用法

    一.FFmpeg简介 FFmpeg是一款非常快速的视频和音频转换器, 是开源项目 FFmpeg (Fast Forward moving pictures expert group) 的命令行程序. ...

  9. 分析轮子(二)- << ,>>,>> (左移、右移、无符号右移)

    前言:写 分析轮子(一)-ArrayList.java 的时候看到源码中有 int newCapacity = oldCapacity + (oldCapacity >> 1); 这样的代 ...

  10. 城市经纬度 json 理解SignalR Main(string[] args)之args传递的几种方式 串口编程之端口 多线程详细介绍 递归一个List<T>,可自己根据需要改造为通用型。 Sql 优化解决方案

    城市经纬度 json https://www.cnblogs.com/innershare/p/10723968.html 理解SignalR ASP .NET SignalR 是一个ASP .NET ...