能力值:
( LV9,RANK:1210 )
|
-
-
2 楼
VXD没有试过,也不会写,不过在SYS里改过,可以的.
|
能力值:
( LV8,RANK:130 )
|
-
-
3 楼
呵呵,我只听说过rc0,rc1,rc2,rc3。至于rc4还从来没听说过
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
最初由 softworm 发布 VXD没有试过,也不会写,不过在SYS里改过,可以的.
sys里面你真的改过吗?
我在sys里mov eax CR0可以,但是mov eax,CR4不行,看来DDK也没有对它进行定义呀。
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
80386 CPU开始具有CR0 ~CR3 4个控制器,到Pentium又增加了1个控制寄存器CR4
|
能力值:
( LV8,RANK:130 )
|
-
-
6 楼
最初由 alphapiao 发布 80386 CPU开始具有CR0 ~CR3 4个控制器,到Pentium又增加了1个控制寄存器CR4
难怪我不知道,我看的都是386的东西。
那你在写Vxd的时候,有没有用.586呢?(呵呵我假设你用ASM写)
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
我是用C写的,过会用asm试试看,谢谢lenus的提醒。
其实对编译器不支持的指令,可以使用DB .. DB ..这样的直接机器码。
可惜的是在.c和.cpp文件里,下面的写法并不能通过
_asm
{
db 0fh
db 20h
db 0e0h
}
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
刚刚试了asm方式与vxd并且.586p,的确可以mov eax,CR4。
首先谢谢lenus.
不过,在C文件里,不能.586p吧。还是不能.c文件的问题。
|
能力值:
( 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
}
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
楼上的,真是太感谢你了,解决了我的大问题。谢谢!!!!
|
|
|