-
-
[原创]内核学习-系统调用上
-
发表于: 2021-7-20 20:44 12097
-
双机调试配置参看我的另一篇文章[原创]内核学习-双机调试环境搭建-软件逆向-看雪论坛-安全社区|安全招聘|bbs.pediy.com,基于xp sp3系统
分析ReadProcessMemory了解系统调用
ida打开kernel32.dll(ReadProcessMemory函数在这个dll里)
参数压栈,call NTReadVirtualMemory,跳转至loc_7C802204
loc_7C802204调用了sub_7C8093FD
sub_7C8093FD内部调用了另一个函数RtlNtStatusToDosError
这个函数的作用是设置错误号
从sub_7C8093FD出来后,将eax清零,跳转到loc_7C8021F9
返回
当调用ReadProcessMemory失败时,返回结果为0,若NtReadVirtualMemory返回结果大于等于0,返回结果为1
ReadProcessMemory函数在kernel32.dll中只是调用了NtReadVirtualMemory,然后设置了返回值
在ntdll.dll中,Ntdll.dll
:大多数API都会通过这个DLL进入内核(0环)
真正读取进程内存的函数在0环实现,我们所用的函数只是系统提供给我们的函数接口
该数据结构是三环与零环的共享内存。
它们使用固定的地址值映射,_KUSER_SHARED_DATA结构区域在User层和Kernel层地址分别为:User
:0x7ffe0000Kernnel
:0xffdf0000
指向的是同一个物理页,但是在user层是只读,在kernel层是可读可写的。
此结构体由操作系统负责初始化,其偏移 0x300 处有一个 SystemCall 属性,是个函数指针。
sysenter 指令可用于特权级 3 的用户代码调用特权级 0 的系统内核代码,而 SYSEXIT 指令则用于特权级 0 的系统代码返回用户空间中。sysenter 指令可以在 3,2,1 这三个特权级别调用(Linux 中只用到了特权级 3),而 SYSEXIT 指令只能从特权级 0 调用。
描述:当操作系统初始化时,其会通过CPUID指令查询当前CPU是否支持快速调用,如果支持则这里填写通过快速调用进入零环,否则通过中断进入零环。
可以设置eax=1,执行cpuid指令,处理器的特征信息被放在ecx和edx寄存器中,其中edx包含了一个SEP位(第11位),该位指明了当前处理器知否支持sysenter/sysexit指令,SEP=1,说明当前CPU支持 sysenter / sysexit 指令。以此来自行查看前处理器是否支持sysenter/sysexit指令。
当CPU支持快读调用,SystemCall 指向 ntdll.dll!KiFastSystemCall()
当CPU不支持快速调用,SystemCall 指向 ntdll.dll!KiIntSystemCall()
所有的API进内核时,统一的中断号为0x2e
在执行KiIntSystemCall函数前,系统调用号已被写入EAX。
在IDT表中找到0x2E号门描述符:2E 右移3位(或者乘8)得到 0x170,加上 r idtr
获取的IDT基址,可以计算出 2E号中断对应的描述符:8053ee000008e481
门描述符:8053ee00
0008e481
指向地址:8053e481
CS:门描述符的段选择子部分(0008)(系统代码段)
查看eip
TSS描述符是 80008b04`200020ab,所以TSS的地址就是 80042000
所以ESP = 8054acf0, SS= 0010
小结:
进入0环后执行的内核函数NT!KiSystemService
mov edx,esp 三环栈顶值传给edx,此时eax中已经是系统调用号
sysenter指令 寄存器数据传递
sysenter 是从 MSR 寄存器里读取 CS,ESP,EIP(MSR寄存器里的值,则是系统启动时就已经填好)
相关的MSR寄存器的值
可以通过RDMSR/WRMST来进行读写(操作系统使用WRMST写该寄存器):
查看eip所在地址的反汇编:
SS
= IA32_SYSENTER_CS + 8
3环进0环的两种方式,分别是中断门和快速调用,CPU支持快速调用,那么_KUSER_SHARED_DATA 结构体的 SystemCall 属性指向的函数是 KiFastSystemCall,执行 KiFastSystemCall,使用快速调用的方式进0环;如果不支持,那么SystemCall 指向的函数是KiIntSystemCall,执行 KiIntSystemCall,使用中断门的方式进0环。
KiFastSystemCall:KiIntSystemCall:
两个函数的共同点:
1.更改4个寄存器:SS CS EIP ESP,进入0环。
两个函数的区别:
1.快速调用不需要访问内存,而中断门需要读TSS和IDT表
2.int 0x2e 和 sysenter 指令进0环后,分别调用了两个函数 KiSystemService 和 KiFastCallEntry。
int 0x2e进0环后调用函数KiSystemService
_Trap_Frame 和0环栈密切相关。用户定义中断进0环,涉及提权时,CPU会把5个寄存器的值压入0环堆栈。EIP CS SS EFLAG ESP
线程切换时会修改TSS表,确保每个线程执行时,TSS里的ESP,SS都对应当前线程。
基本概念:
_KTRAP_FRAME
_KPCR
KPCR(Processor Control Region)是CPU控制区的意思,每个CPU都有一个KPCR结构。描述cpu状态
_NT_TIB
主要存储了SEH结构化异常链表和一个指向自己的指针。
_KPRCB
_ETHREAD
存储的是线程相关的信息
_KTHREAD
存储的是线程相关的状态
中断门进0环后,新的ESP指向偏移 0x068(Eip)处!!!!!!
通过中断门的方式进入内核的时候,SS CS EIP ESP EFLAG的值已经存在 _KTRAP_FRAME中了。
解析:00407631 --00407637:设置_KTRAP_FRAME结构体的下图中的成员
00407639 :fs.base = ffdff000,指向当前CPU的KPCR结构
在3环fs指向TEB结构,进入0环,fs指向KPCR结构体(通过段描述符),
00407650:esi 指向CurrentThread(当前cpu所执行线程的_ETHREAD)
00407656 : push dword ptr [esi+140h]:_ETHREAD+0x00+0x140->_KTHERAD+0x140-> PreviousMode(原来的先前模式)
00407640 压栈 ExceptionList->ExceptionList
00407656 压栈 PreviousMode->PreviousPreviousMode
0040765C:sub esp, 48h ;提升48h后 esp指向 _KTRAP_FRAME
00407698 jnz Dr_kss_a;保存调试相关的寄存器(DR0-DR7)到 _KTRAP_FRAME.DR0-_KTRAP_FRAME.DR7
0040769F jmp loc_407781;可以发现跳转到了_KiFastCallEntry函数内部(不同的方式保存寄存器,但是最后执行的代码是一样的),因为_KiIntSystemCall与KiFastSystemCall对于寄存器的处理不同,所以需要使用_KiFastCallEntry,KiSystemService两个函数填充_KTRAP_FRAME结构体。
sysenter 指令进0环后调用KiFastCallEntry
原来的寄存器存储到了 _Trap_Frame 结构体里,3环API参数指针通过EDX传给0环
##
.text:
7C92D9E0
mov eax,
0BAh
系统调用号,对应操作系统内核中某个函数的编号
.text:
7C92D9E5
mov edx,
7FFE0300h
函数地址,该函数决定了我们用什么方式进
0
环
.text:
7C92D9EA
call dword ptr [edx]
.text:
7C92D9EC
retn
14h
.text:
7C92D9E0
mov eax,
0BAh
系统调用号,对应操作系统内核中某个函数的编号
.text:
7C92D9E5
mov edx,
7FFE0300h
函数地址,该函数决定了我们用什么方式进
0
环
.text:
7C92D9EA
call dword ptr [edx]
.text:
7C92D9EC
retn
14h
nt!_KUSER_SHARED_DATA
+
0x000
TickCountLow : Uint4B
+
0x004
TickCountMultiplier : Uint4B
+
0x008
InterruptTime : _KSYSTEM_TIME
+
0x014
SystemTime : _KSYSTEM_TIME
+
0x020
TimeZoneBias : _KSYSTEM_TIME
+
0x02c
ImageNumberLow : Uint2B
+
0x02e
ImageNumberHigh : Uint2B
+
0x030
NtSystemRoot : [
260
] Uint2B
+
0x238
MaxStackTraceDepth : Uint4B
+
0x23c
CryptoExponent : Uint4B
+
0x240
TimeZoneId : Uint4B
+
0x244
Reserved2 : [
8
] Uint4B
+
0x264
NtProductType : _NT_PRODUCT_TYPE
+
0x268
ProductTypeIsValid : UChar
+
0x26c
NtMajorVersion : Uint4B
+
0x270
NtMinorVersion : Uint4B
+
0x274
ProcessorFeatures : [
64
] UChar
+
0x2b4
Reserved1 : Uint4B
+
0x2b8
Reserved3 : Uint4B
+
0x2bc
TimeSlip : Uint4B
+
0x2c0
AlternativeArchitecture : _ALTERNATIVE_ARCHITECTURE_TYPE
+
0x2c8
SystemExpirationDate : _LARGE_INTEGER
+
0x2d0
SuiteMask : Uint4B
+
0x2d4
KdDebuggerEnabled : UChar
+
0x2d5
NXSupportPolicy : UChar
+
0x2d8
ActiveConsoleId : Uint4B
+
0x2dc
DismountCount : Uint4B
+
0x2e0
ComPlusPackage : Uint4B
+
0x2e4
LastSystemRITEventTickCount : Uint4B
+
0x2e8
NumberOfPhysicalPages : Uint4B
+
0x2ec
SafeBootMode : UChar
+
0x2f0
TraceLogging : Uint4B
+
0x2f8
TestRetInstruction : Uint8B
+
0x300
SystemCall : ntdll.dll!KiFastSystemCall()
/
ntdll.dll!KiIntSystemCall()
+
0x304
SystemCallReturn : Uint4B
+
0x308
SystemCallPad : [
3
] Uint8B
+
0x320
TickCount : _KSYSTEM_TIME
+
0x320
TickCountQuad : Uint8B
+
0x330
Cookie : Uint4B
nt!_KUSER_SHARED_DATA
+
0x000
TickCountLow : Uint4B
+
0x004
TickCountMultiplier : Uint4B
+
0x008
InterruptTime : _KSYSTEM_TIME
+
0x014
SystemTime : _KSYSTEM_TIME
+
0x020
TimeZoneBias : _KSYSTEM_TIME
+
0x02c
ImageNumberLow : Uint2B
+
0x02e
ImageNumberHigh : Uint2B
+
0x030
NtSystemRoot : [
260
] Uint2B
+
0x238
MaxStackTraceDepth : Uint4B
+
0x23c
CryptoExponent : Uint4B
+
0x240
TimeZoneId : Uint4B
+
0x244
Reserved2 : [
8
] Uint4B
+
0x264
NtProductType : _NT_PRODUCT_TYPE
+
0x268
ProductTypeIsValid : UChar
+
0x26c
NtMajorVersion : Uint4B
+
0x270
NtMinorVersion : Uint4B
+
0x274
ProcessorFeatures : [
64
] UChar
+
0x2b4
Reserved1 : Uint4B
+
0x2b8
Reserved3 : Uint4B
+
0x2bc
TimeSlip : Uint4B
+
0x2c0
AlternativeArchitecture : _ALTERNATIVE_ARCHITECTURE_TYPE
+
0x2c8
SystemExpirationDate : _LARGE_INTEGER
+
0x2d0
SuiteMask : Uint4B
+
0x2d4
KdDebuggerEnabled : UChar
+
0x2d5
NXSupportPolicy : UChar
+
0x2d8
ActiveConsoleId : Uint4B
+
0x2dc
DismountCount : Uint4B
+
0x2e0
ComPlusPackage : Uint4B
+
0x2e4
LastSystemRITEventTickCount : Uint4B
+
0x2e8
NumberOfPhysicalPages : Uint4B
+
0x2ec
SafeBootMode : UChar
+
0x2f0
TraceLogging : Uint4B
+
0x2f8
TestRetInstruction : Uint8B
+
0x300
SystemCall : ntdll.dll!KiFastSystemCall()
/
ntdll.dll!KiIntSystemCall()
+
0x304
SystemCallReturn : Uint4B
+
0x308
SystemCallPad : [
3
] Uint8B
+
0x320
TickCount : _KSYSTEM_TIME
+
0x320
TickCountQuad : Uint8B
+
0x330
Cookie : Uint4B
kd> u
8053e481
kd> u
8053e481
kd> rdmsr
174
/
/
查看CS
kd> rdmsr
175
/
/
查看ESP
kd> rdmsr
176
/
/
查看EIP
kd> rdmsr
174
/
/
查看CS
kd> rdmsr
175
/
/
查看ESP
kd> rdmsr
176
/
/
查看EIP
nt!_KTRAP_FRAME
+
0x000
DbgEbp : Uint4B
+
0x004
DbgEip : Uint4B
+
0x008
DbgArgMark : Uint4B
+
0x00c
DbgArgPointer : Uint4B
+
0x010
TempSegCs : Uint4B
+
0x014
TempEsp : Uint4B
+
0x018
Dr0 : Uint4B
+
0x01c
Dr1 : Uint4B
+
0x020
Dr2 : Uint4B
+
0x024
Dr3 : Uint4B
+
0x028
Dr6 : Uint4B
+
0x02c
Dr7 : Uint4B
+
0x030
SegGs : Uint4B
+
0x034
SegEs : Uint4B
+
0x038
SegDs : Uint4B
+
0x03c
Edx : Uint4B
+
0x040
Ecx : Uint4B
+
0x044
Eax : Uint4B
+
0x048
PreviousPreviousMode : Uint4B
+
0x04c
ExceptionList : Ptr32 _EXCEPTION_REGISTRATION_RECORD
+
0x050
SegFs : Uint4B
+
0x054
Edi : Uint4B
+
0x058
Esi : Uint4B
+
0x05c
Ebx : Uint4B
+
0x060
Ebp : Uint4B
+
0x064
ErrCode : Uint4B
+
0x068
Eip : Uint4B
+
0x06c
SegCs : Uint4B
+
0x070
EFlags : Uint4B
+
0x074
HardwareEsp : Uint4B
+
0x078
HardwareSegSs : Uint4B
+
0x07c
V86Es : Uint4B
+
0x080
V86Ds : Uint4B
+
0x084
V86Fs : Uint4B
+
0x088
V86Gs : Uint4B
nt!_KTRAP_FRAME
+
0x000
DbgEbp : Uint4B
+
0x004
DbgEip : Uint4B
+
0x008
DbgArgMark : Uint4B
+
0x00c
DbgArgPointer : Uint4B
+
0x010
TempSegCs : Uint4B
+
0x014
TempEsp : Uint4B
+
0x018
Dr0 : Uint4B
+
0x01c
Dr1 : Uint4B
+
0x020
Dr2 : Uint4B
+
0x024
Dr3 : Uint4B
+
0x028
Dr6 : Uint4B
+
0x02c
Dr7 : Uint4B
+
0x030
SegGs : Uint4B
+
0x034
SegEs : Uint4B
+
0x038
SegDs : Uint4B
+
0x03c
Edx : Uint4B
+
0x040
Ecx : Uint4B
+
0x044
Eax : Uint4B
+
0x048
PreviousPreviousMode : Uint4B
+
0x04c
ExceptionList : Ptr32 _EXCEPTION_REGISTRATION_RECORD
+
0x050
SegFs : Uint4B
+
0x054
Edi : Uint4B
+
0x058
Esi : Uint4B
+
0x05c
Ebx : Uint4B
+
0x060
Ebp : Uint4B
+
0x064
ErrCode : Uint4B
+
0x068
Eip : Uint4B
+
0x06c
SegCs : Uint4B
+
0x070
EFlags : Uint4B
+
0x074
HardwareEsp : Uint4B
+
0x078
HardwareSegSs : Uint4B
+
0x07c
V86Es : Uint4B
+
0x080
V86Ds : Uint4B
+
0x084
V86Fs : Uint4B
+
0x088
V86Gs : Uint4B
nt!_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
nt!_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
nt!_NT_TIB
+
0x000
ExceptionList : Ptr32 _EXCEPTION_REGISTRATION_RECORD
+
0x004
StackBase : Ptr32 Void
+
0x008
StackLimit : Ptr32 Void
+
0x00c
SubSystemTib : Ptr32 Void
+
0x010
FiberData : Ptr32 Void
+
0x010
Version : Uint4B
+
0x014
ArbitraryUserPointer : Ptr32 Void
+
0x018
Self : Ptr32 _NT_TIB
nt!_NT_TIB
+
0x000
ExceptionList : Ptr32 _EXCEPTION_REGISTRATION_RECORD
+
0x004
StackBase : Ptr32 Void
+
0x008
StackLimit : Ptr32 Void
+
0x00c
SubSystemTib : Ptr32 Void
+
0x010
FiberData : Ptr32 Void
+
0x010
Version : Uint4B
+
0x014
ArbitraryUserPointer : Ptr32 Void
+
0x018
Self : Ptr32 _NT_TIB
nt!_KPRCB
+
0x000
MinorVersion : Uint2B
+
0x002
MajorVersion : Uint2B
+
0x004
CurrentThread : Ptr32 _KTHREAD
+
0x008
NextThread : Ptr32 _KTHREAD
+
0x00c
IdleThread : Ptr32 _KTHREAD
+
0x010
Number : Char
+
0x011
Reserved : Char
+
0x012
BuildType : Uint2B
+
0x014
SetMember : Uint4B
+
0x018
CpuType : Char
+
0x019
CpuID : Char
+
0x01a
CpuStep : Uint2B
+
0x01c
ProcessorState : _KPROCESSOR_STATE
+
0x33c
KernelReserved : [
16
] Uint4B
+
0x37c
HalReserved : [
16
] Uint4B
+
0x3bc
PrcbPad0 : [
92
] UChar
+
0x418
LockQueue : [
16
] _KSPIN_LOCK_QUEUE
+
0x498
PrcbPad1 : [
8
] UChar
+
0x4a0
NpxThread : Ptr32 _KTHREAD
+
0x4a4
InterruptCount : Uint4B
+
0x4a8
KernelTime : Uint4B
+
0x4ac
UserTime : Uint4B
+
0x4b0
DpcTime : Uint4B
+
0x4b4
DebugDpcTime : Uint4B
+
0x4b8
InterruptTime : Uint4B
+
0x4bc
AdjustDpcThreshold : Uint4B
+
0x4c0
PageColor : Uint4B
+
0x4c4
SkipTick : Uint4B
+
0x4c8
MultiThreadSetBusy : UChar
+
0x4c9
Spare2 : [
3
] UChar
+
0x4cc
ParentNode : Ptr32 _KNODE
+
0x4d0
MultiThreadProcessorSet : Uint4B
+
0x4d4
MultiThreadSetMaster : Ptr32 _KPRCB
+
0x4d8
ThreadStartCount : [
2
] Uint4B
+
0x4e0
CcFastReadNoWait : Uint4B
+
0x4e4
CcFastReadWait : Uint4B
+
0x4e8
CcFastReadNotPossible : Uint4B
+
0x4ec
CcCopyReadNoWait : Uint4B
+
0x4f0
CcCopyReadWait : Uint4B
+
0x4f4
CcCopyReadNoWaitMiss : Uint4B
+
0x4f8
KeAlignmentFixupCount : Uint4B
+
0x4fc
KeContextSwitches : Uint4B
+
0x500
KeDcacheFlushCount : Uint4B
+
0x504
KeExceptionDispatchCount : Uint4B
+
0x508
KeFirstLevelTbFills : Uint4B
+
0x50c
KeFloatingEmulationCount : Uint4B
+
0x510
KeIcacheFlushCount : Uint4B
+
0x514
KeSecondLevelTbFills : Uint4B
+
0x518
KeSystemCalls : Uint4B
+
0x51c
SpareCounter0 : [
1
] Uint4B
+
0x520
PPLookasideList : [
16
] _PP_LOOKASIDE_LIST
+
0x5a0
PPNPagedLookasideList : [
32
] _PP_LOOKASIDE_LIST
+
0x6a0
PPPagedLookasideList : [
32
] _PP_LOOKASIDE_LIST
+
0x7a0
PacketBarrier : Uint4B
+
0x7a4
ReverseStall : Uint4B
+
0x7a8
IpiFrame : Ptr32 Void
+
0x7ac
PrcbPad2 : [
52
] UChar
+
0x7e0
CurrentPacket : [
3
] Ptr32 Void
+
0x7ec
TargetSet : Uint4B
+
0x7f0
WorkerRoutine : Ptr32 void
+
0x7f4
IpiFrozen : Uint4B
+
0x7f8
PrcbPad3 : [
40
] UChar
+
0x820
RequestSummary : Uint4B
+
0x824
SignalDone : Ptr32 _KPRCB
+
0x828
PrcbPad4 : [
56
] UChar
+
0x860
DpcListHead : _LIST_ENTRY
+
0x868
DpcStack : Ptr32 Void
+
0x86c
DpcCount : Uint4B
+
0x870
DpcQueueDepth : Uint4B
+
0x874
DpcRoutineActive : Uint4B
+
0x878
DpcInterruptRequested : Uint4B
+
0x87c
DpcLastCount : Uint4B
+
0x880
DpcRequestRate : Uint4B
+
0x884
MaximumDpcQueueDepth : Uint4B
+
0x888
MinimumDpcRate : Uint4B
+
0x88c
QuantumEnd : Uint4B
+
0x890
PrcbPad5 : [
16
] UChar
+
0x8a0
DpcLock : Uint4B
+
0x8a4
PrcbPad6 : [
28
] UChar
+
0x8c0
CallDpc : _KDPC
+
0x8e0
ChainedInterruptList : Ptr32 Void
+
0x8e4
LookasideIrpFloat : Int4B
+
0x8e8
SpareFields0 : [
6
] Uint4B
+
0x900
VendorString : [
13
] UChar
+
0x90d
InitialApicId : UChar
+
0x90e
LogicalProcessorsPerPhysicalProcessor : UChar
+
0x910
MHz : Uint4B
+
0x914
FeatureBits : Uint4B
+
0x918
UpdateSignature : _LARGE_INTEGER
+
0x920
NpxSaveArea : _FX_SAVE_AREA
+
0xb30
PowerState : _PROCESSOR_POWER_STATE
nt!_KPRCB
+
0x000
MinorVersion : Uint2B
+
0x002
MajorVersion : Uint2B
+
0x004
CurrentThread : Ptr32 _KTHREAD
+
0x008
NextThread : Ptr32 _KTHREAD
+
0x00c
IdleThread : Ptr32 _KTHREAD
+
0x010
Number : Char
+
0x011
Reserved : Char
+
0x012
BuildType : Uint2B
+
0x014
SetMember : Uint4B
+
0x018
CpuType : Char
+
0x019
CpuID : Char
+
0x01a
CpuStep : Uint2B
+
0x01c
ProcessorState : _KPROCESSOR_STATE
+
0x33c
KernelReserved : [
16
] Uint4B
+
0x37c
HalReserved : [
16
] Uint4B
+
0x3bc
PrcbPad0 : [
92
] UChar
+
0x418
LockQueue : [
16
] _KSPIN_LOCK_QUEUE
+
0x498
PrcbPad1 : [
8
] UChar
+
0x4a0
NpxThread : Ptr32 _KTHREAD
+
0x4a4
InterruptCount : Uint4B
+
0x4a8
KernelTime : Uint4B
+
0x4ac
UserTime : Uint4B
+
0x4b0
DpcTime : Uint4B
+
0x4b4
DebugDpcTime : Uint4B
+
0x4b8
InterruptTime : Uint4B
+
0x4bc
AdjustDpcThreshold : Uint4B
+
0x4c0
PageColor : Uint4B
+
0x4c4
SkipTick : Uint4B
+
0x4c8
MultiThreadSetBusy : UChar
+
0x4c9
Spare2 : [
3
] UChar
+
0x4cc
ParentNode : Ptr32 _KNODE
+
0x4d0
MultiThreadProcessorSet : Uint4B
+
0x4d4
MultiThreadSetMaster : Ptr32 _KPRCB
+
0x4d8
ThreadStartCount : [
2
] Uint4B
+
0x4e0
CcFastReadNoWait : Uint4B
+
0x4e4
CcFastReadWait : Uint4B
+
0x4e8
CcFastReadNotPossible : Uint4B
+
0x4ec
CcCopyReadNoWait : Uint4B
+
0x4f0
CcCopyReadWait : Uint4B
+
0x4f4
CcCopyReadNoWaitMiss : Uint4B
+
0x4f8
KeAlignmentFixupCount : Uint4B
+
0x4fc
KeContextSwitches : Uint4B
+
0x500
KeDcacheFlushCount : Uint4B
+
0x504
KeExceptionDispatchCount : Uint4B
+
0x508
KeFirstLevelTbFills : Uint4B
+
0x50c
KeFloatingEmulationCount : Uint4B
+
0x510
KeIcacheFlushCount : Uint4B
+
0x514
KeSecondLevelTbFills : Uint4B
+
0x518
KeSystemCalls : Uint4B
+
0x51c
SpareCounter0 : [
1
] Uint4B
+
0x520
PPLookasideList : [
16
] _PP_LOOKASIDE_LIST
+
0x5a0
PPNPagedLookasideList : [
32
] _PP_LOOKASIDE_LIST
+
0x6a0
PPPagedLookasideList : [
32
] _PP_LOOKASIDE_LIST
+
0x7a0
PacketBarrier : Uint4B
+
0x7a4
ReverseStall : Uint4B
+
0x7a8
IpiFrame : Ptr32 Void
+
0x7ac
PrcbPad2 : [
52
] UChar
+
0x7e0
CurrentPacket : [
3
] Ptr32 Void
+
0x7ec
TargetSet : Uint4B
+
0x7f0
WorkerRoutine : Ptr32 void
+
0x7f4
IpiFrozen : Uint4B
+
0x7f8
PrcbPad3 : [
40
] UChar
+
0x820
RequestSummary : Uint4B
+
0x824
SignalDone : Ptr32 _KPRCB
+
0x828
PrcbPad4 : [
56
] UChar
+
0x860
DpcListHead : _LIST_ENTRY
+
0x868
DpcStack : Ptr32 Void
+
0x86c
DpcCount : Uint4B
+
0x870
DpcQueueDepth : Uint4B
+
0x874
DpcRoutineActive : Uint4B
+
0x878
DpcInterruptRequested : Uint4B
+
0x87c
DpcLastCount : Uint4B
+
0x880
DpcRequestRate : Uint4B
+
0x884
MaximumDpcQueueDepth : Uint4B
+
0x888
MinimumDpcRate : Uint4B
+
0x88c
QuantumEnd : Uint4B
+
0x890
PrcbPad5 : [
16
] UChar
+
0x8a0
DpcLock : Uint4B
+
0x8a4
PrcbPad6 : [
28
] UChar
+
0x8c0
CallDpc : _KDPC
+
0x8e0
ChainedInterruptList : Ptr32 Void
+
0x8e4
LookasideIrpFloat : Int4B
+
0x8e8
SpareFields0 : [
6
] Uint4B
+
0x900
VendorString : [
13
] UChar
+
0x90d
InitialApicId : UChar
+
0x90e
LogicalProcessorsPerPhysicalProcessor : UChar
+
0x910
MHz : Uint4B
+
0x914
FeatureBits : Uint4B
+
0x918
UpdateSignature : _LARGE_INTEGER
+
0x920
NpxSaveArea : _FX_SAVE_AREA
+
0xb30
PowerState : _PROCESSOR_POWER_STATE
nt!_ETHREAD
+
0x000
Tcb : _KTHREAD
+
0x1c0
CreateTime : _LARGE_INTEGER
+
0x1c0
NestedFaultCount : Pos
0
,
2
Bits
+
0x1c0
ApcNeeded : Pos
2
,
1
Bit
+
0x1c8
ExitTime : _LARGE_INTEGER
+
0x1c8
LpcReplyChain : _LIST_ENTRY
+
0x1c8
KeyedWaitChain : _LIST_ENTRY
+
0x1d0
ExitStatus : Int4B
+
0x1d0
OfsChain : Ptr32 Void
+
0x1d4
PostBlockList : _LIST_ENTRY
+
0x1dc
TerminationPort : Ptr32 _TERMINATION_PORT
+
0x1dc
ReaperLink : Ptr32 _ETHREAD
+
0x1dc
KeyedWaitValue : Ptr32 Void
+
0x1e0
ActiveTimerListLock : Uint4B
+
0x1e4
ActiveTimerListHead : _LIST_ENTRY
+
0x1ec
Cid : _CLIENT_ID
+
0x1f4
LpcReplySemaphore : _KSEMAPHORE
+
0x1f4
KeyedWaitSemaphore : _KSEMAPHORE
+
0x208
LpcReplyMessage : Ptr32 Void
+
0x208
LpcWaitingOnPort : Ptr32 Void
+
0x20c
ImpersonationInfo : Ptr32 _PS_IMPERSONATION_INFORMATION
+
0x210
IrpList : _LIST_ENTRY
+
0x218
TopLevelIrp : Uint4B
+
0x21c
DeviceToVerify : Ptr32 _DEVICE_OBJECT
+
0x220
ThreadsProcess : Ptr32 _EPROCESS
+
0x224
StartAddress : Ptr32 Void
+
0x228
Win32StartAddress : Ptr32 Void
+
0x228
LpcReceivedMessageId : Uint4B
+
0x22c
ThreadListEntry : _LIST_ENTRY
+
0x234
RundownProtect : _EX_RUNDOWN_REF
+
0x238
ThreadLock : _EX_PUSH_LOCK
+
0x23c
LpcReplyMessageId : Uint4B
+
0x240
ReadClusterSize : Uint4B
+
0x244
GrantedAccess : Uint4B
+
0x248
CrossThreadFlags : Uint4B
+
0x248
Terminated : Pos
0
,
1
Bit
+
0x248
DeadThread : Pos
1
,
1
Bit
+
0x248
HideFromDebugger : Pos
2
,
1
Bit
+
0x248
ActiveImpersonationInfo : Pos
3
,
1
Bit
+
0x248
SystemThread : Pos
4
,
1
Bit
+
0x248
HardErrorsAreDisabled : Pos
5
,
1
Bit
+
0x248
BreakOnTermination : Pos
6
,
1
Bit
+
0x248
SkipCreationMsg : Pos
7
,
1
Bit
+
0x248
SkipTerminationMsg : Pos
8
,
1
Bit
+
0x24c
SameThreadPassiveFlags : Uint4B
+
0x24c
ActiveExWorker : Pos
0
,
1
Bit
+
0x24c
ExWorkerCanWaitUser : Pos
1
,
1
Bit
+
0x24c
MemoryMaker : Pos
2
,
1
Bit
+
0x250
SameThreadApcFlags : Uint4B
+
0x250
LpcReceivedMsgIdValid : Pos
0
,
1
Bit
+
0x250
LpcExitThreadCalled : Pos
1
,
1
Bit
+
0x250
AddressSpaceOwner : Pos
2
,
1
Bit
+
0x254
ForwardClusterOnly : UChar
+
0x255
DisablePageFaultClustering : UChar
nt!_ETHREAD
+
0x000
Tcb : _KTHREAD
+
0x1c0
CreateTime : _LARGE_INTEGER
+
0x1c0
NestedFaultCount : Pos
0
,
2
Bits
+
0x1c0
ApcNeeded : Pos
2
,
1
Bit
+
0x1c8
ExitTime : _LARGE_INTEGER
+
0x1c8
LpcReplyChain : _LIST_ENTRY
+
0x1c8
KeyedWaitChain : _LIST_ENTRY
+
0x1d0
ExitStatus : Int4B
+
0x1d0
OfsChain : Ptr32 Void
+
0x1d4
PostBlockList : _LIST_ENTRY
+
0x1dc
TerminationPort : Ptr32 _TERMINATION_PORT
+
0x1dc
ReaperLink : Ptr32 _ETHREAD
+
0x1dc
KeyedWaitValue : Ptr32 Void
+
0x1e0
ActiveTimerListLock : Uint4B
+
0x1e4
ActiveTimerListHead : _LIST_ENTRY
+
0x1ec
Cid : _CLIENT_ID
+
0x1f4
LpcReplySemaphore : _KSEMAPHORE
+
0x1f4
KeyedWaitSemaphore : _KSEMAPHORE
+
0x208
LpcReplyMessage : Ptr32 Void
+
0x208
LpcWaitingOnPort : Ptr32 Void
+
0x20c
ImpersonationInfo : Ptr32 _PS_IMPERSONATION_INFORMATION
+
0x210
IrpList : _LIST_ENTRY
+
0x218
TopLevelIrp : Uint4B
+
0x21c
DeviceToVerify : Ptr32 _DEVICE_OBJECT
+
0x220
ThreadsProcess : Ptr32 _EPROCESS
+
0x224
StartAddress : Ptr32 Void
+
0x228
Win32StartAddress : Ptr32 Void
+
0x228
LpcReceivedMessageId : Uint4B
+
0x22c
ThreadListEntry : _LIST_ENTRY
+
0x234
RundownProtect : _EX_RUNDOWN_REF
+
0x238
ThreadLock : _EX_PUSH_LOCK
+
0x23c
LpcReplyMessageId : Uint4B
+
0x240
ReadClusterSize : Uint4B
+
0x244
GrantedAccess : Uint4B
+
0x248
CrossThreadFlags : Uint4B
+
0x248
Terminated : Pos
0
,
1
Bit
+
0x248
DeadThread : Pos
1
,
1
Bit
+
0x248
HideFromDebugger : Pos
2
,
1
Bit
+
0x248
ActiveImpersonationInfo : Pos
3
,
1
Bit
+
0x248
SystemThread : Pos
4
,
1
Bit
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
- [原创]CVE-2017-11882分析和白象样本分析 8258
- 银狐样本分析 12917
- [原创]CS[1]exe木马分析 7751
- [原创]内核漏洞学习[6]-HEVD-UninitializedStackVariable 27928
- [原创]植物大战僵尸外挂实现 13095