首页
论坛
课程
招聘
雪    币: 229
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝

[系统底层] [求助][求助]一段ring0代码实在不理解

2008-10-19 17:40 5429

[系统底层] [求助][求助]一段ring0代码实在不理解

2008-10-19 17:40
5429
.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;

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

HWS计划·2020安全精英夏令营来了!我们在华为松山湖欧洲小镇等你

最新回复 (10)
雪    币: 84
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xnop 活跃值 2008-10-19 18:14
2
0
比较 if( *(KeTickCount+8) != *(KeTickCount+4) )

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

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

#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 }                                                    \
    }                                                                       \
}
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
athlor 活跃值 2008-10-20 13:38
7
0
QIQI好猛..
这也能知道
雪    币: 229
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
binglan212 活跃值 2008-10-20 13:48
8
0
非常感谢,应该就说你说的这个宏

查了一下,结果如下

    这个函数的原型如下:

    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;
    }
雪    币: 179
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
莽莽 活跃值 2008-10-21 09:08
9
0
强帖留名嘿嘿
雪    币: 202
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cnben 活跃值 2008-10-22 11:56
10
0
学习中,汇编中最头疼的就是看懂了汇编,去不知道意思
雪    币: 179
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
莽莽 活跃值 2008-10-24 11:43
11
0
是如何知道这个是ring0代码的?
游客
登录 | 注册 方可回帖
返回