您的位置:首页 > 其它

获取当前进程.线程。过程一探。

2011-09-25 16:07 281 查看
PsGetCurrentProcess

PsGetCurrentThread

这2个函数

前者是获取当前进程

后者是获取当前线程。

--------

他们的反汇编代码如下

lkd> u IoGetCurrentProcess

nt!PsGetCurrentProcess:

8052c2ee 64a124010000 mov eax,dword ptr fs:[00000124h]

8052c2f4 8b4044 mov eax,dword ptr [eax+44h]

8052c2f7 c3 ret

lkd> u PsGetCurrentThread

nt!PsGetCurrentThread:

8052c312 64a124010000 mov eax,dword ptr fs:[00000124h]

8052c318 c3 ret

------------------------

可以看出都操作了FS寄存器。

而FS寄存器其实就是

_KPCR

结构

这个结构如下:

lkd> dt _kpcr

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

----------

+0x120 PrcbData : _KPRCB

+0x000 MinorVersion : Uint2B

+0x002 MajorVersion : Uint2B

+0x004 CurrentThread : Ptr32 _KTHREAD //后者就是根据该成员取得当前线程的

+0x008 NextThread : Ptr32 _KTHREAD

+0x00c IdleThread : Ptr32 _KTHREAD

-------

那么前者呢。

lkd> dt _KTHREAD -r1

ntdll!_KTHREAD

.............省略..............

+0x034 ApcState : _KAPC_STATE

+0x000 ApcListHead : [2] _LIST_ENTRY

+0x010 Process : Ptr32 _KPROCESS //就是这个位置
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: