首页
社区
课程
招聘
这段代码为什么会蓝屏?
发表于: 2010-7-21 01:30 5892

这段代码为什么会蓝屏?

2010-7-21 01:30
5892
一加载就蓝屏,不知道问题出在哪里? 调试过.入口过程没有错..出了入口就蓝了..新手求解
.386
.model flat, stdcall
option casemap:none

include D:\MASMPlus\Include\ntddk.inc
includelib D:\MASMPlus\lib\ntoskrnl.lib
include D:\MASMPlus\Include\ntoskrnl.inc

.data
KiSystemServicestr db "KiSystemService Addr%08X",0
DriverUnloadStr db "DriverUnload",0
KiSystemService dd ?

.code
DriverUnload proc pDriverObject:PDRIVER_OBJECT
Invoke DbgPrint,addr DriverUnloadStr
mov eax, STATUS_SUCCESS
ret
DriverUnload endp

.code INIT
DriverEntry proc pDriverObject:PDRIVER_OBJECT, pusRegistryPath:PUNICODE_STRING
local idtr[8]:BYTE 

             		    ;int 3
			    sidt idtr
			    lea ebx,idtr
			    mov ecx,DWORD  ptr[ebx+2]
			    add ecx,368 ;KiSystemService 2E*8
			    mov ebx,0
			    mov bx,WORD  ptr[ecx+6]
			    shl ebx,16
			    mov bx,WORD  ptr[ecx]
			    mov KiSystemService,ebx
			    invoke DbgPrint,addr KiSystemServicestr,ebx
            mov eax, pDriverObject
            assume eax:PTR DRIVER_OBJECT
            mov [eax].DriverUnload, offset DriverUnload
            assume eax:nothing
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
mov eax, STATUS_SUCCESS
ret
DriverEntry endp

end DriverEntry

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (15)
雪    币: 459
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
期待大牛来解答。
2010-7-21 07:50
0
雪    币: 656
活跃值: (448)
能力值: ( LV12,RANK:360 )
在线值:
发帖
回帖
粉丝
3
2010-7-21 11:12
0
雪    币: 517
活跃值: (84)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
4
unsigned char idt[8];
        __asm sidt fword ptr idt;
        unsigned long lpidt = *(unsigned long*)&idt[2];
        KdPrint(("IDT==0x%x\n",lpidt));
        unsigned short tmp = *(unsigned short*)((lpidt+8*9)+6);
        KdPrint(("int 9==0x%x\n",(unsigned long)tmp));
        tmp&=0xFF00;
        if(tmp!=0)
                {
                unsigned short tmp2 = *(unsigned short*)((lpidt+8*0xE)+6);
                KdPrint(("int E==0x%x\n",(unsigned long)tmp2));
                if(tmp2&0xFF00 != tmp)
                        {
                        *(unsigned short*)((lpidt+8*0xE)+6) = 0;
                        KdPrint(("done\n"));
                        }
                }
2010-7-21 11:54
0
雪    币: 656
活跃值: (448)
能力值: ( LV12,RANK:360 )
在线值:
发帖
回帖
粉丝
5
我把这段代码去掉就不会出错了!!
;			    sidt idtr
;			    lea ebx,idtr
;			    mov ecx,DWORD  ptr[ebx+2]
;			    add ecx,368 ;KiSystemService 2E*8
;			    mov ebx,0
;			    mov bx,WORD  ptr[ecx+6]
;			    shl ebx,16
;			    mov bx,WORD  ptr[ecx]
;			    mov KiSystemService,ebx
;			    invoke DbgPrint,addr KiSystemServicestr,ebx
2010-7-21 12:00
0
雪    币: 656
活跃值: (448)
能力值: ( LV12,RANK:360 )
在线值:
发帖
回帖
粉丝
6
[QUOTE=triones;838251]unsigned char idt[8];
        __asm sidt fword ptr idt;
        unsigned long lpidt = *(unsigned long*)&idt[2];
        KdPrint(("IDT==0x%x\n",lpidt));
        unsigned short...[/QUOTE]

看不懂..说说是什么问题?
2010-7-21 12:41
0
雪    币: 517
活跃值: (84)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
7
纵观整个代码,我只发现这点不同:sidt fword ptr idt;  ---  sidt idtr
好像的确需要fword ptr
2010-7-21 21:02
0
雪    币: 30
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
没有啊,我试了,没有蓝屏
2010-7-21 22:21
0
雪    币: 656
活跃值: (448)
能力值: ( LV12,RANK:360 )
在线值:
发帖
回帖
粉丝
9
两个指令是一样的.....试过了
2010-7-22 14:39
0
雪    币: 656
活跃值: (448)
能力值: ( LV12,RANK:360 )
在线值:
发帖
回帖
粉丝
10
那就奇怪了
2010-7-22 14:40
0
雪    币: 998
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
上调试器看下dump信息。
2010-7-24 10:48
0
雪    币: 341
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
没有看懂
2010-7-24 13:48
0
雪    币: 656
活跃值: (448)
能力值: ( LV12,RANK:360 )
在线值:
发帖
回帖
粉丝
13
知道原因了.EDX的值要保护和恢复...哎..又是自己解决的...........
2010-7-24 21:14
0
雪    币: 656
活跃值: (448)
能力值: ( LV12,RANK:360 )
在线值:
发帖
回帖
粉丝
14
说错了 是EBX
2010-7-24 21:21
0
雪    币: 68
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
怎么看都好像没有问题呀!怎么会蓝屏?
2010-7-27 18:52
0
雪    币: 998
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
ebx,esi,edi这些寄存器都要保存的。
2010-7-27 20:07
0
游客
登录 | 注册 方可回帖
返回
//