使用汇编
_asm
{
mov eax,fs:[0x1C]
}
得到的eax值为0xB8340000,与预想的0xFFDFF000不符。
如果是0xFFDFF000,KdVersionBlock 地址便可以正确获得到。
没有搜索到相关资料介绍为什么会有这一现象,恳求大牛给予一些提示。
共4个环境,2个正常,2个异常。
虚拟机正常1:XP SP3 RC2运行正常,
真实机正常2:XP SP2运行正常
真实机异常1:XP SP3,处理器AMD Athlon(tm) 64 X2 Dual Core Processor 4400+ (双核)
真实机异常2:Vista home版
以下是真实机异常1的相应结构信息
lkd> dt _kpcr 0xB8340000
nt!_KPCR
+0x000 NtTib : _NT_TIB
+0x01c SelfPcr : 0xb8340000 _KPCR
+0x020 Prcb : 0xb8340120 _KPRCB
+0x024 Irql : 0 ''
+0x028 IRR : 0
+0x02c IrrActive : 0
+0x030 IDR : 0xffffffff
+0x034 KdVersionBlock : (null)
+0x038 IDT : 0xb8344590 _KIDTENTRY
+0x03c GDT : 0xb8344190 _KGDTENTRY
+0x040 TSS : 0xb8340d70 _KTSS
+0x044 MajorVersion : 1
+0x046 MinorVersion : 1
+0x048 SetMember : 2
+0x04c StallScaleFactor : 0x907
+0x050 DebugActive : 0 ''
+0x051 Number : 0x1 ''
+0x052 Spare0 : 0 ''
+0x053 SecondLevelCacheAssociativity : 0x10 ''
+0x054 VdmAlert : 0
+0x058 KernelReserved : [14] 0
+0x090 SecondLevelCacheSize : 0x80000
+0x094 HalReserved : [16] 1
+0x0d4 InterruptMode : 0
+0x0d8 Spare1 : 0 ''
+0x0dc KernelReserved2 : [17] 0
+0x120 PrcbData : _KPRCB
lkd> dt _kpcr 0xFFDFF000
nt!_KPCR
+0x000 NtTib : _NT_TIB
+0x01c SelfPcr : 0xffdff000 _KPCR
+0x020 Prcb : 0xffdff120 _KPRCB
+0x024 Irql : 0 ''
+0x028 IRR : 0
+0x02c IrrActive : 0
+0x030 IDR : 0xffffffff
+0x034 KdVersionBlock : 0x8054e2b8
+0x038 IDT : 0x8003f400 _KIDTENTRY
+0x03c GDT : 0x8003f000 _KGDTENTRY
+0x040 TSS : 0x80042000 _KTSS
+0x044 MajorVersion : 1
+0x046 MinorVersion : 1
+0x048 SetMember : 1
+0x04c StallScaleFactor : 0x907
+0x050 DebugActive : 0 ''
+0x051 Number : 0 ''
+0x052 Spare0 : 0 ''
+0x053 SecondLevelCacheAssociativity : 0x10 ''
+0x054 VdmAlert : 0
+0x058 KernelReserved : [14] 0
+0x090 SecondLevelCacheSize : 0x80000
+0x094 HalReserved : [16] 0
+0x0d4 InterruptMode : 0
+0x0d8 Spare1 : 0 ''
+0x0dc KernelReserved2 : [17] 0
+0x120 PrcbData : _KPRCB
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课