首页
社区
课程
招聘
[求助]用汇编写定时器,蓝屏,高手救我!
发表于: 2008-7-9 12:08 6438

[求助]用汇编写定时器,蓝屏,高手救我!

2008-7-9 12:08
6438
什么都不说了,直接看代码:

.386
.model flat,stdcall
option casemap:none
include ntstatus.inc
include ntddk.inc
include w2kundoc.inc
include hal.inc
include ntoskrnl.inc
includelib hal.lib
includelib ntoskrnl.lib

.data
Timer        db 30h (0)
ZhDpc        db 30h (0)

sz2        db 'Timer对象 : %08x',0
sz3        db 'Dpc Routine地址 : %08x',0

.code

ZhDpcRoutine proc Dpc,Context,Argument1,Argument2
        pushad
        call @F
        db '进入了DPC例程!',0
     @@:
        call DbgPrint
        pop eax
        popad
        ret
ZhDpcRoutine endp

ZhSetTimer proc
        pushad
        invoke DbgPrint,offset sz2,offset Timer
        invoke DbgPrint,offset sz3,offset ZhDpcRoutine
        invoke KeInitializeTimer,offset Timer
        invoke KeInitializeDpc,offset ZhDpc,offset ZhDpcRoutine,90
        invoke KeSetTimerEx,offset Timer,10,10,5000,offset ZhDpc
        popad
        ret
ZhSetTimer endp

DriverUnload proc DriverObject
        pushad
        invoke KeCancelTimer,offset Timer
        invoke KeRemoveQueueDpc,offset ZhDpc
        popad
        ret
DriverUnload endp

DriverEntry proc DriverObject,RegistryPath
        pushad

        mov eax,DriverObject
        mov [eax+34h],offset DriverUnload

        invoke ZhSetTimer

     _end:
        popad
        xor eax,eax
        ret
DriverEntry endp
end DriverEntry

加载运行后,等到定时器第一次到期时,蓝了,
如下图:


请高手分析,先行谢过!!!

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 204
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
0xD1号错误是因为程序在过高的中断优先级下运行时遇到缺页中断而产生的。
(错误产生在地址0x703c1280处,0x00000000表示程序在读取数据时出现错误。
vddk.h中有
#define DISPATCH_LEVEL 2       // Dispatcher level
表明程序工作在DISPATCH_LEVEL级别上。)
0x703c1280地址处是用户空间地址,那里的内存是分页的!
Timer、ZhDpc和ZhDpcRoutine都必须位于非分页内存里面,而你的程序中相应的东西
在分页内存中,因此错误就产生了。
2008-7-9 22:34
0
雪    币: 248
活跃值: (42)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
驱动不是都以非分页内存加载的吗?
我这是驱动,出错地址怎么会到70301280H处呢?
2008-7-12 11:30
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
4
用什么加载驱动?
2008-7-12 11:38
0
雪    币: 248
活跃值: (42)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
OpenSCManager
CreateService
StartService
DeviceIoControl
... ...
...
2008-7-12 11:54
0
雪    币: 204
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
你加载驱动的函数是正确的,但是错误结果表示你的程序并未加载到系统空间中,你应该仔细分析一下你的程序代码,同时使用别人提供的加载驱动的程序试验一下,看是否会出现同样的效果。
CreateService成功之后要用OpenService,再调用StartService,另外检查一下在调用CreateService时是否带上了SERVICE_KERNEL_DRIVER参数。
最后,建议你将dmp文件分析一下,你就可以准确的分析是不是我说的那个原因引起的。
2008-7-13 21:19
0
雪    币: 248
活跃值: (42)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
是用KmdManager加载的,肯定是加载到了系统空间中.

晕了好久,问题依然...

2008-7-18 10:56
0
雪    币: 321
活跃值: (275)
能力值: ( LV13,RANK:1050 )
在线值:
发帖
回帖
粉丝
8
定义出现问题
Timer  db 30h (0)
ZhDpc  db 30h (0)

访问了非法数据。
2008-7-18 11:12
0
雪    币: 204
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
楼主把你的驱动跟我发一份,把整个工程打包过来就更好了,我试试。e-mail:wdsm2000@yahoo.com.cn
2008-7-22 10:58
0
游客
登录 | 注册 方可回帖
返回