本文是根据网上的两篇文章《Finding some non-exported kernel variables in windows xp》和《Getting Kernel Variables from KdVersionBLOCK, Part 2》得出的结果,作的总结。
_KPCR
+0x000 NtTib : _NT_TIB
+0x01c SelfPcr : Ptr32 _KPCR
+0x020 Prcb : Ptr32 _KPRCB
+0x024 Irql : UChar
+0x028 IRR : Uint4B
+0x02c IrrActive : Uint4B
+0x030 IDR : Uint4B
+0x034 KdVersionBlock : Ptr32 Void ß此处
+0x038 IDT : Ptr32 _KIDTENTRY
+0x03c GDT : Ptr32 _KGDTENTRY
+0x040 TSS : Ptr32 _KTSS
+0x044 MajorVersion : Uint2B
+0x046 MinorVersion : Uint2B
+0x048 SetMember : Uint4B
+0x04c StallScaleFactor : Uint4B
+0x050 DebugActive : UChar
+0x051 Number : UChar
+0x052 Spare0 : UChar
+0x053 SecondLevelCacheAssociativity : UChar
+0x054 VdmAlert : Uint4B
+0x058 KernelReserved : [14] Uint4B
+0x090 SecondLevelCacheSize : Uint4B
+0x094 HalReserved : [16] Uint4B
+0x0d4 InterruptMode : Uint4B
+0x0d8 Spare1 : UChar
+0x0dc KernelReserved2 : [17] Uint4B
+0x120 PrcbData : _KPRCB
typedef struct _DBGKD_GET_VERSION64 {
+0x000 USHORT MajorVersion;
+0x002 USHORT MinorVersion;
+0x004 USHORT ProtocolVersion;
+0x006 USHORT Flags;
+0x008 USHORT MachineType;
+0x00a UCHAR MaxPacketType;
+0x00b UCHAR MaxStateChange;
+0x00c UCHAR MaxManipulate;
+0x00d UCHAR Simulation;
+0x00e USHORT Unused[1];
+0x010 ULONG64 KernBase;
+0x018 ULONG64 PsLoadedModuleList;
+0x020 ULONG64 DebuggerDataList; ß此处
} DBGKD_GET_VERSION64, *PDBGKD_GET_VERSION64;
//
typedef struct _DBGKD_DEBUG_DATA_HEADER64 {
+0x000 LIST_ENTRY64 List;
+0x010 ULONG OwnerTag;
+0x014 ULONG Size;
} DBGKD_DEBUG_DATA_HEADER64, *PDBGKD_DEBUG_DATA_HEADER64;
typedef struct _KDDEBUGGER_DATA64 {
+0x000 DBGKD_DEBUG_DATA_HEADER64 Header;
+0x018 ULONG64 KernBase;
+0x020 ULONG64 BreakpointWithStatus;
+0x028 ULONG64 SavedContext;
+0x030 USHORT ThCallbackStack;
+0x032 USHORT NextCallback;
+0x034 USHORT FramePointer;
+0x036 USHORT PaeEnabled:1;
+0x038 ULONG64 KiCallUserMode;
+0x040 ULONG64 KeUserCallbackDispatcher;
+0x048 ULONG64 PsLoadedModuleList;
+0x050 ULONG64 PsActiveProcessHead;
+0x058 ULONG64 PspCidTable;
+0x060 ULONG64 ExpSystemResourcesList;
+0x068 ULONG64 ExpPagedPoolDescriptor;
+0x070 ULONG64 ExpNumberOfPagedPools;
+0x078 ULONG64 KeTimeIncrement;
+0x080 ULONG64 KeBugCheckCallbackListHead;
+0x088 ULONG64 KiBugcheckData;
+0x090 ULONG64 IopErrorLogListHead;
+0x098 ULONG64 ObpRootDirectoryObject;
+0x0a0 ULONG64 ObpTypeObjectType;
+0x0a8 ULONG64 MmSystemCacheStart;
+0x0b0 ULONG64 MmSystemCacheEnd;
+0x0b8 ULONG64 MmSystemCacheWs;
+0x0c0 ULONG64 MmPfnDatabase;
+0x0c8 ULONG64 MmSystemPtesStart;
+0x0d0 ULONG64 MmSystemPtesEnd;
+0x0d8 ULONG64 MmSubsectionBase;
+0x0e0 ULONG64 MmNumberOfPagingFiles;
+0x0e8 ULONG64 MmLowestPhysicalPage;
+0x0f0 ULONG64 MmHighestPhysicalPage;
+0x0f8 ULONG64 MmNumberOfPhysicalPages;
+0x100 ULONG64 MmMaximumNonPagedPoolInBytes;
+0x108 ULONG64 MmNonPagedSystemStart;
+0x110 ULONG64 MmNonPagedPoolStart;
+0x118 ULONG64 MmNonPagedPoolEnd;
+0x120 ULONG64 MmPagedPoolStart;
+0x128 ULONG64 MmPagedPoolEnd;
+0x130 ULONG64 MmPagedPoolInformation;
+0x138 ULONG64 MmPageSize;
+0x140 ULONG64 MmSizeOfPagedPoolInBytes;
+0x148 ULONG64 MmTotalCommitLimit;
+0x150 ULONG64 MmTotalCommittedPages;
+0x158 ULONG64 MmSharedCommit;
+0x160 ULONG64 MmDriverCommit;
+0x168 ULONG64 MmProcessCommit;
+0x170 ULONG64 MmPagedPoolCommit;
+0x178 ULONG64 MmExtendedCommit;
+0x180 ULONG64 MmZeroedPageListHead;
+0x188 ULONG64 MmFreePageListHead;
+0x190 ULONG64 MmStandbyPageListHead;
+0x198 ULONG64 MmModifiedPageListHead;
+0x1a0 ULONG64 MmModifiedNoWritePageListHead;
+0x1a8 ULONG64 MmAvailablePages;
+0x1b0 ULONG64 MmResidentAvailablePages;
+0x1b8 ULONG64 PoolTrackTable;
+0x1c0 ULONG64 NonPagedPoolDescriptor;
+0x1c8 ULONG64 MmHighestUserAddress;
+0x1d0 ULONG64 MmSystemRangeStart;
+0x1d8 ULONG64 MmUserProbeAddress;
+0x1e0 ULONG64 KdPrintCircularBuffer;
+0x1e8 ULONG64 KdPrintCircularBufferEnd;
+0x1f0 ULONG64 KdPrintWritePointer;
+0x1f8 ULONG64 KdPrintRolloverCount;
+0x200 ULONG64 MmLoadedUserImageList;
// NT 5.1 Addition
+0x208 ULONG64 NtBuildLab;
+0x210 ULONG64 KiNormalSystemCall;
// NT 5.0 QFE addition
+0x218 ULONG64 KiProcessorBlock;
+0x220 ULONG64 MmUnloadedDrivers;
+0x228 ULONG64 MmLastUnloadedDriver;
+0x230 ULONG64 MmTriageActionTaken;
+0x238 ULONG64 MmSpecialPoolTag;
+0x240 ULONG64 KernelVerifier;
+0x248 ULONG64 MmVerifierData;
+0x250 ULONG64 MmAllocatedNonPagedPool;
+0x258 ULONG64 MmPeakCommitment;
+0x260 ULONG64 MmTotalCommitLimitMaximum;
+0x268 ULONG64 CmNtCSDVersion;
// NT 5.1 Addition
+0x270 ULONG64 MmPhysicalMemoryBlock;
+0x278 ULONG64 MmSessionBase;
+0x280 ULONG64 MmSessionSize;
+0x288 ULONG64 MmSystemParentTablePage;
} KDDEBUGGER_DATA64, *PKDDEBUGGER_DATA64;
NT 5.0 就是Windows 2000;NT5.1就是Windows XP.