首页
社区
课程
招聘
WinDbg调试驱动程序虚拟机Windows7蓝屏
发表于: 2013-1-12 18:09 6960

WinDbg调试驱动程序虚拟机Windows7蓝屏

2013-1-12 18:09
6960
物理机Windows7、虚拟机Windows7。物理机Windows7配置WinDbg调试器,自己写的一个驱动程序,其中驱动程序内有形式如下的程序:(驱动程序为系统引导启动)

void Func000(......)//这个函数只运行1次
{
TEXT000:
.....................这里实现函数功能.......
TEXT001:
在函数末尾把:地址TEXT000到TEXT001这段内存清0或加密
}

void Func001(......)//这个函数只运行1次
{
TEXT000:
.....................这里实现函数功能.......
TEXT001:
在函数末尾把:地址TEXT000到TEXT001这段内存清0或加密
}
void Func002(......)//这个函数只运行1次
{
TEXT000:
.....................这里实现函数功能.......
TEXT001:
在函数末尾把:地址TEXT000到TEXT001这段内存清0或加密
}

void Func003(......)//这个函数只运行1次
{
.....................这里实现函数功能.......
函数开头机器码 0x55 0x60.....
}

驱动程序在WinDbg调试过程中,当我对Func000、Func001、Func002这些函数调用完毕后 把程序断在 call Func003;这条指令,然后查看虚拟机Func003函数的内存机器码确认为  0x55 0x60.....后,(A)F7单步进入函数Func003,WinDbg立即显示虚拟机程序进入nt模块并开始进入蓝屏处理程序。(B)如果我点击WinDbg的工具栏的单步进入进入按钮,WinDbg立即来到指令0x60.....也就是跳过一个字节的机器码,汇编指令显示为 push SS;再F7单步进入,则WinDbg就会显示来到了一个机器码全部为0的一段内存,从此进入nt模块并开始进入蓝屏处理程序。(C)于是用IDA分析了这个驱动程序,没有发现函数Func003机器码真的有什么问题,我不相信我这个驱动真的会引起系统蓝屏,于是不调试Windows7虚拟机,直接正常启动系统,结果Windows7虚拟机正常启动,不会蓝屏!有人知道这是为什么?我虽然真心想阻止驱动程序被调试,但是却意外的阻止驱动程序被调试,谁知道WinDbg调试原理,来解释一下?

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 952
活跃值: (1821)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
精简版虚拟机的原因,我也上过这当
2013-1-14 13:16
0
雪    币: 267
活跃值: (438)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
3
现在我用Windows7版WDK工具包里的WinDbg调试了虚拟机,发现以上的问题不会导致虚拟机调试状态蓝屏。 这会不会与WinDbg调试有关?是不是WinDbg调试时会对虚拟机进行某种方式的数据修改
2013-1-14 13:39
0
雪    币: 952
活跃值: (1821)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
可能的,有可能是你的windbg版本太低。。。结构之类的不对
2013-1-14 15:21
0
雪    币: 267
活跃值: (438)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
5
谢谢你对我的问题的关注与帮助!
2013-1-27 18:00
0
雪    币: 350
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
windbg每单步一下, 都会把eflag的值写到[esp-4], 你是不是在代码里用到了这个值?
2013-1-27 18:05
0
雪    币: 267
活跃值: (438)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
7
[QUOTE=Diabloking;1138603]windbg每单步一下, 都会把eflag的值写到[esp-4], 你是不是在代码里用到了这个值?[/QUOTE]

没有,我是用c语言写的,没有内镶汇编进行穿越堆栈数据访问的,所以肯定没有访问[esp-4]的数据。
2013-1-28 23:45
0
雪    币: 49
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
驱动里加上一行KeBugCheckEx 就能引起蓝屏
去掉这行代码就不蓝屏了

其实任何一个处理错误的驱动代码都是这样的效果“运行蓝屏 不运行就正常”
不知道是不是我理解错误了?

上上代码 上上DUMP 这才是弄清楚的基本途径
2013-1-29 09:42
0
雪    币: 267
活跃值: (438)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
9
[QUOTE=Diabloking;1138603]windbg每单步一下, 都会把eflag的值写到[esp-4], 你是不是在代码里用到了这个值?[/QUOTE]

如果没有单步,windbg会把eflag的值写到哪呢?
2013-2-17 19:43
0
游客
登录 | 注册 方可回帖
返回
//