首页
社区
课程
招聘
[求助][求助]一段ring0代码实在不理解
发表于: 2008-10-19 17:40 6752

[求助][求助]一段ring0代码实在不理解

2008-10-19 17:40
6752
.text:00018574                 mov     eax, ds:KeTickCount
.text:00018579                 jmp     short loc_1857D
.text:0001857B ; ---------------------------------------------------------------------------
.text:0001857B
.text:0001857B loc_1857B:                             
.text:0001857B                 pause
.text:0001857D
.text:0001857D loc_1857D:                           
.text:0001857D                 mov     ecx, [eax+4]              ;var4=*(KeTickCount+4)
.text:00018580                 mov     [ebp+var_4], ecx
.text:00018583                 mov     ecx, [eax]            
.text:00018585                 mov     edx, [eax+8]
.text:00018588                 mov     [ebp+var_8], ecx      ;var8=*KeTickCount
.text:0001858B                 mov     ecx, [ebp+var_4]
.text:0001858E                 cmp     ecx, edx                   if(var4 != *(KeTickCount+8) )
.text:00018590                 jnz     short loc_1857B           goto loop;

不太理解它的作用,高手能帮忙解释一下吗?

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

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 88
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
比较 if( *(KeTickCount+8) != *(KeTickCount+4) )

具体干啥不知道
2008-10-19 18:14
0
雪    币: 245
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
楼上,你说的我都标出来了,……
2008-10-19 19:17
0
雪    币: 105
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
比较KeTickCount()函数中的字节码?
2008-10-19 22:32
0
雪    币: 214
活跃值: (46)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
typedef struct _KSYSTEM_TIME {
    ULONG LowPart;
    LONG High1Time;
    LONG High2Time;
} KSYSTEM_TIME, *PKSYSTEM_TIME;

KSYSTEM_TIME KeTickCount;
2008-10-20 10:35
0
雪    币: 214
活跃值: (46)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
你遇到的应该是这个宏:

#define KeQueryTickCount(CurrentCount ) { \
    volatile PKSYSTEM_TIME _TickCount = *((PKSYSTEM_TIME *)(&KeTickCount)); \
    while (TRUE) {                                                          \
        (CurrentCount)->HighPart = _TickCount->High1Time;                   \
        (CurrentCount)->LowPart = _TickCount->LowPart;                      \
        if ((CurrentCount)->HighPart == _TickCount->High2Time) break;       \
        _asm { rep nop }                                                    \
    }                                                                       \
}
2008-10-20 10:42
0
雪    币: 207
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
QIQI好猛..
这也能知道
2008-10-20 13:38
0
雪    币: 245
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
非常感谢,应该就说你说的这个宏

查了一下,结果如下

    这个函数的原型如下:

    VOID
        KeQueryTickCount(
            OUT PLARGE_INTEGER  TickCount
        );

    返回到TickCount中的并不是一个简单的毫秒数。这是一个“滴答”数。但是一个“滴答”到底为多长的时间,在不同的硬件环境下可能有所不同。为此,必须结合另一个函数使用。下面这个函数获得一个“滴答”的具体的100纳秒数。

    ULONG
          KeQueryTimeIncrement(
              );

    得知以上的关系之后,下面的代码可以求得实际的毫秒数:
   
    void MyGetTickCount (PULONG msec)
    {
        LARGE_INTEGER tick_count;
        ULONG myinc = KeQueryTimeIncrement();
        KeQueryTickCount(&tick_count);
        tick_count.QuadPart *= myinc;
        tick_count.QuadPart /=  10000;
        *msec = tick_count.LowPart;
    }
2008-10-20 13:48
0
雪    币: 179
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
强帖留名嘿嘿
2008-10-21 09:08
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
学习中,汇编中最头疼的就是看懂了汇编,去不知道意思
2008-10-22 11:56
0
雪    币: 179
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
是如何知道这个是ring0代码的?
2008-10-24 11:43
0
游客
登录 | 注册 方可回帖
返回
//