Idle进程相关的一些东西

Idle进程相关的一些东西
 

Idle进程和System进程一样,也是系统中的一个特殊进程,严格讲它不算是一个进 程,但是它有自己的EPROCESS,并有一个IdleThread.
若说它算一个进程,它的进程空间、句柄表、Token等却又和System进程一样,即共享了System的内核数据,所以不能以常理对待之.
关于Idle进程的两个问题:
一.活动进程链上为何找不到Idle进程?
事实上是因为Idle进程根本就不在活动进程链上挂着.
有人在遍历ActiveProcessLink时总会看到一个很奇怪的进程,PID很离奇,也得不到映像名,便以为是Idle进程了.
其实那是PsActiveProcessHead,就是活动进程链的链表头,它只是一个LIST_ENTRY结构而已,读取它后面的数据是没有意义的.
二.如何找到Idle进程?
似乎看到过一种暴搜法,但是事实上完全没有必要.
在处理器控制块中保存着IdleThread,当处理器空闲时,它就会调度这个线程来完成一些工作(零页面处理?).
因此从处理器控制域KPRCB中找Idle进程是最方便快捷的.
过程如下:
lkd> dt _KPRCB ffdff120
nt!_KPRCB
    +0x000 MinorVersion      : 1
    +0x002 MajorVersion      : 1
    +0x004 CurrentThread     : 0x8958fda8 _KTHREAD
    +0x008 NextThread        : (null) 
    +0x00c IdleThread        : 0x80561c20 _KTHREAD  
//Idle线程
   
lkd> dt _KTHREAD 0x80561c20 
nt!_KTHREAD
    +0x000 Header            : _DISPATCHER_HEADER
    +0x010 MutantListHead    : _LIST_ENTRY [ 0x80561c30 - 0x80561c30 ]
    +0x018 InitialStack      : 0x80559480 
    +0x01c StackLimit        : 0x80556480 
    +0x020 Teb               : (null) 
    +0x024 TlsArray          : (null) 
    +0x028 KernelStack       : 0x805591cc 
     ....
    +0x034 ApcState          : _KAPC_STATE

lkd> dt _KAPC_STATE 0x80561c20+34 
nt!_KAPC_STATE
    +0x000 ApcListHead       : [2] _LIST_ENTRY [ 0x80561c54 - 0x80561c54 ]
    +0x010 Process           : 0x80561e80 _KPROCESS  
//这个就是Idle进程了
    +0x014 KernelApcInProgress : 0 ''
    +0x015 KernelApcPending : 0 ''
    +0x016 UserApcPending    : 0 ''

获取IdleProcess的代码如下:   
VOID GetIdleProcess()
{
     PEPROCESS IdleProcess;
     _asm
     {
         mov eax,fs:[0x20] 
//取KPCR
         mov eax,[eax+0xC] //取IdleThread
         mov eax,[eax+0x44]//取ApcState->Process
         mov IdleProcess,eax
     }
     DbgPrint("IdleProcess=0x%08X\n",IdleProcess);
}

四行代码搞定~~


转自:http://laokaddk.blog.51cto.com/368606/338720

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值