首页
社区
课程
招聘
有谁知道CR4寄存器吗?[求助]
发表于: 2005-6-30 19:58 10339

有谁知道CR4寄存器吗?[求助]

2005-6-30 19:58
10339

我在VXD里mov eax,CR4通不过。显然这个CR4没有被定义过。
有谁知道如何改变CR4的值,当然最好是在vxd里面实现。

另外,怎么用工具看它的值,如softice和trw.
谢谢!


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

收藏
免费 7
支持
分享
最新回复 (9)
雪    币: 494
活跃值: (629)
能力值: ( LV9,RANK:1210 )
在线值:
发帖
回帖
粉丝
2
VXD没有试过,也不会写,不过在SYS里改过,可以的.
2005-6-30 21:20
0
雪    币: 159
活跃值: (339)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
3
呵呵,我只听说过rc0,rc1,rc2,rc3。至于rc4还从来没听说过
2005-6-30 22:54
0
雪    币: 214
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
最初由 softworm 发布
VXD没有试过,也不会写,不过在SYS里改过,可以的.


sys里面你真的改过吗?
我在sys里mov eax CR0可以,但是mov eax,CR4不行,看来DDK也没有对它进行定义呀。
2005-7-1 09:29
0
雪    币: 214
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
80386 CPU开始具有CR0 ~CR3 4个控制器,到Pentium又增加了1个控制寄存器CR4
2005-7-1 10:03
0
雪    币: 159
活跃值: (339)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
6
最初由 alphapiao 发布
80386 CPU开始具有CR0 ~CR3 4个控制器,到Pentium又增加了1个控制寄存器CR4

难怪我不知道,我看的都是386的东西。

那你在写Vxd的时候,有没有用.586呢?(呵呵我假设你用ASM写)
2005-7-1 15:05
0
雪    币: 214
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我是用C写的,过会用asm试试看,谢谢lenus的提醒。
其实对编译器不支持的指令,可以使用DB .. DB ..这样的直接机器码。
可惜的是在.c和.cpp文件里,下面的写法并不能通过
_asm
{
  db 0fh
  db 20h
  db 0e0h
}
2005-7-1 18:06
0
雪    币: 214
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
刚刚试了asm方式与vxd并且.586p,的确可以mov eax,CR4。
首先谢谢lenus.
不过,在C文件里,不能.586p吧。还是不能.c文件的问题。
2005-7-1 18:07
0
雪    币: 494
活跃值: (629)
能力值: ( LV9,RANK:1210 )
在线值:
发帖
回帖
粉丝
9
void NTAPI HookInt_0D()
{
        // 设置CR4寄存器的Time Stamp Disable位,ring3执行rdtsc会引发#GP(0)
        // 接管0D中断

        PINT_VECTOR         pInt0D = 0;
       
        //_asm int 3

        __asm
            {
                cli

                //
                rdtsc
                mov ts.Low,eax                // 设置初始值
                mov ts.High,edx

                lea eax, idtr                // load offset into EAX
                sidt [eax]
               
                _emit 0x0F                // mov eax,cr4,Set TSD
                _emit 0x20
                _emit 0xE0
               
                or eax,0x4
               
                _emit 0x0F                // mov cr4,eax
                _emit 0x22
                _emit 0xE0
        }

        //
        pInt0D = (PINT_VECTOR)(idtr.Base + 0x0D * 8);
        oldInt_0D = (((ULONG)(pInt0D->HighOffset))<<0x10) | ((ULONG)(pInt0D->LowOffset));

        pInt0D->HighOffset = (USHORT)(((ULONG)(NewInt0D) >> 0x10) & 0xFFFF);
        pInt0D->LowOffset = (USHORT)(NewInt0D);

        _asm sti
}
2005-7-1 20:28
0
雪    币: 214
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
楼上的,真是太感谢你了,解决了我的大问题。谢谢!!!!
2005-7-2 16:53
0
游客
登录 | 注册 方可回帖
返回
//