请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

梦织未来

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1210|回复: 4

[原创] 双机调试的一点整理(适合新手)

[复制链接]

升级   82%

14

主题

0

精华

41

积分
发表于 2017-1-5 14:28:42 | 显示全部楼层 |阅读模式
经常在论坛发帖求问,自己因为刚接触内核所以也没什么东西可以回报论坛的,今天整理了下这段时间学习双机调试的一点东西,写错的地方希望帮忙指正下.
双机调试相关的五个变量:
    1.    KiDebugRoutine()

    2.    KdDebuggerEnabled
    3.    KdEnteredDebugger
    4.    KdPitchDebugger
    5.    KdDebuggerNotPresent
变量介绍:
KdDebuggerEnabled:
        由KdIniySystem()函数初始化.布尔类型,用来标识内核调试是否启动.当启动选项中包含/DEBUG
        或/DEBUGPORT而且不包含/NODEBUG时,这个变量会被设置为TRUE.
        另外,为了支持内核调试,系统的KeUpdateStstemTime函数在每次更新系统时间的时候会检测全局变量
        KdDebuggerEnable来判断内核调试引擎是否被启用,如果这个变量为真,便调用KdPollBreakIn函数来查看调试器
        是否发送了中断命令,如果是,便调用DbgBreakPointWithStatus触发断点异常,以中断到调试器.
KdPitchDebugger:

        由KdIniySystem()函数初始化.布尔类型,用来标识是否显式抑制内核调试.当启动选项中包含

        /NODEBUG时,这个变量会被设置为TRUE.

KiDebugRoutine():

       由KdIniySystem()函数初始化.函数指针类型,用来记录内核调试引擎的异常处理回调函数,当内核调试引擎活动时,
        它指向KdpTrap函数,否则指向KdpStub函数.
以上三个变量是在第一次调用KiSystemStartup函数时调用kdInitSystem()时初始化的.

KdEnteredDebugger:

        在调试引擎向调试器报告状态变化信息包之前,它会调用KdEnterDebugger函数冻结内核.这个过程中会将全局变量
        KdEnteredDebugger设置为真.
KdDebuggerNotPresent:

        介绍这个全局变量,首先先了解一下,PACKET_TYPE_KD_RESET这个类型控制包,这种包在请求跟内核调试引擎重新建立连接,用于同步.
        当调试器在等待与内核调试引擎建立连接时,通常会反复发送这个控制包.在恢复目标运行后,WinDbg也会定期地发送这样的控制包.
        而内核调试引擎在接收到这种包的时候,将全局变量KdDebuggerNotPresent设置为0.

关于如何定位这些变量:
        KdDebuggerEnabledKdEnteredDebugger、KdDebuggerNotPresent这三个是内核导出的变量,所以申明一下就可以了

        例如,extern PVOID  KdEnteredDebugger;
        KdPitchDebugger变量没有导出,通过查找WRK发现在KeEnterKernelDebugger在这个导出函数里面有引用,所有我们可以根据
        这个函数去定位到它.声明如下
        NTKERNELAPI    VOID    KeEnterKernelDebugger (VOID);
        KiDebugRoutine这个变量在KdDisableDebugger函数里面被引用,但是我通过WRK源码居然没有搜索出来KdDisableDebugger哪里
        引用了它,而KdDisableDebugger也只搜到了它的申明,没有定义,所只能去WinDbg里面搜了.,KdDisableDebugger是被导出的.

回复

使用道具 举报

升级   25.33%

7

主题

0

精华

88

积分
发表于 2017-1-6 09:05:51 | 显示全部楼层
感谢分享~ MARK 一下 学习
回复 支持 反对

使用道具 举报

升级   14.67%

18

主题

0

精华

244

积分
发表于 2017-1-6 11:20:19 | 显示全部楼层
因为KdDisableDebugger实际在给cl赋值1后直接jmp到KdDisableDebuggerWithLock
回复 支持 反对

使用道具 举报

升级   100%

221

主题

66

精华

1487

积分
发表于 2017-1-10 22:10:08 | 显示全部楼层
谢谢楼主分享 辛苦了
我一定是见鬼了!
回复 支持 反对

使用道具 举报

升级   48%

0

主题

0

精华

24

积分
发表于 2017-3-9 15:40:07 | 显示全部楼层
新手来学习。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|Archiver|mengwuji ( 粤ICP备13060035号-1 )  

GMT+8, 2017-11-22 05:10 , Processed in 0.205889 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表