首页
社区
课程
招聘
[求助]Dpc定时器对象枚举的疑惑。
发表于: 2011-9-4 13:39 5867

[求助]Dpc定时器对象枚举的疑惑。

2011-9-4 13:39
5867
看了这篇帖子;
http://hi.baidu.com/andriy_aolala/blog/item/5aba868b235d50749f2fb437.html

还是很疑惑
我按照它的过程自己反汇编看了一下
结果发现得到的DPC定时器在XT里面压根就没有。我不知道是我自己的分析有错误还是怎么的
希望各位知情人士帮助小弟解惑。
-----------------------------------------------
   看了代码:
发现它是通过
MmGetSystemRoutineAddress
函数获取
KeUpdateSystemTime
这个函数的地址
------
再通过特征码定位到
KiTimerTableListHead
返回
KiTimerTableListHead它的地址,被保存在变量addr中。
--------下面的我是不是哪里错了--------
for (int i=0;i<0x100;i++)  //初始化i为0,范围100,第二次运行生效循环体代码。
{
pnode = (PLIST_ENTRY)(addr+i*8);   //KiTimerTableListHead+8.我这里函数KiTimerTableListHead的位置是0x8055d780,这句话运行后pnode就是0x8055d788?并且吧pnode强制为_LIST_ENTRY结构.

lkd> dt _LIST_ENTRY
nt!_LIST_ENTRY
   +0x000 Flink            : Ptr32 _LIST_ENTRY
   +0x004 Blink            : Ptr32 _LIST_ENTRY


pnext = pnode->Blink; //_LIST_ENTRY结构第2个成员Blink,pnext=8055D78C?;
while(pnext!=pnode)  //如果addr+i*8(Blink?)和addr+i*4(Flink?)相等就跳走。否则运行下面的代码。

{ 
PKTIMER ptimer = CONTAINING_RECORD(pnext,KTIMER,TimerListEntry); 
//上面那句,通过TimerListEntry成员得到KTIME中第一个成员Header的地址。
//pnext是0x18这个成员的地址??不会和上面矛盾吗。

nt!_KTIMER
   +0x000 Header           : _DISPATCHER_HEADER
   +0x010 DueTime          : _ULARGE_INTEGER
   +0x018 TimerListEntry   : _LIST_ENTRY
   +0x020 Dpc              : Ptr32 _KDPC
   +0x024 Period           : Int4B


 if (MmIsAddressValid(ptimer)  //Dpc定时器对象地址是否有效
            && MmIsAddressValid(ptimer->Dpc)  //Dpc地址是否有效

lkd> dt _KDPC
nt!_KDPC
   +0x000 Type             : Int2B
   +0x002 Number           : UChar
   +0x003 Importance       : UChar
   +0x004 DpcListEntry     : _LIST_ENTRY
   +0x00c DeferredRoutine  : Ptr32     void 
   +0x010 DeferredContext  : Ptr32 Void
   +0x014 SystemArgument1  : Ptr32 Void
   +0x018 SystemArgument2  : Ptr32 Void
   +0x01c Lock             : Ptr32 Uint4B


                    && MmIsAddressValid(ptimer->Dpc->DeferredRoutine)) //接着检查函数入口地址是否有效.



{  
                      routine = (ULONG)ptimer->Dpc->DeferredRoutine;   //函数入口传给routine
                     DbgPrint("kitimer:0x%x addr:0x%x  ",(ULONG)ptimer,routine);  //输出DPC定时对象和函数入口地址。

..........省略无关代码............


我在用WINDBG看的时候却发现自己得到的和这个结果不一样。

怎么大家都看热闹不提出个意见啊。。。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 429
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
kd> dd KiTimerTableListHead
80554120  80554120 80554120 80554128 80554128
80554130  80554130 80554130 80554138 80554138
80554140  8627ab30 8627ab30 80554148 80554148
80554150  86223eb0 86223eb0 80554158 80554158
80554160  80554160 80554160 86280760 86280760
80554170  8630a5f0 8601c3d0 80554178 80554178
80554180  80554180 80554180 85ec21b8 86294128
80554190  80554190 80554190 8055c318 8055c318

这个值跟本不正确
2011-11-18 12:04
0
游客
登录 | 注册 方可回帖
返回
//