【旧文章搬运】Idle进程相关的一些东西
原文发表于百度空间,2009-05-13
==========================================================================
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 :
+0x002 MajorVersion :
+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+
nt!_KAPC_STATE
+0x000 ApcListHead : [] _LIST_ENTRY [ 0x80561c54 - 0x80561c54 ]
+0x010 Process : 0x80561e80 _KPROCESS //这个就是Idle进程了
+0x014 KernelApcInProgress : ''
+0x015 KernelApcPending : ''
+0x016 UserApcPending : ''
获取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);
}
四行代码搞定~~
【旧文章搬运】Idle进程相关的一些东西的更多相关文章
- 【旧文章搬运】如何从EPROCESS辨别一个进程是否已退出
原文发表于百度空间,2008-7-31========================================================================== 前面已经通过 ...
- 【旧文章搬运】Windows内核常见数据结构(进程相关)
原文发表于百度空间,2008-7-24========================================================================== 进程的相关结 ...
- 【旧文章搬运】再谈隐藏进程中的DLL模块
原文发表于百度空间,2009-09-17========================================================================== 相当老的话 ...
- 【旧文章搬运】Windows内核常见数据结构(线程相关)
原文发表于百度空间,2008-7-24========================================================================== 线程是进程的 ...
- 【旧文章搬运】关于在指定进程调用KeUserModeCallback的问题
原文发表于百度空间,2010-10-07========================================================================== 由于KeU ...
- 【旧文章搬运】为什么win32k.sys在System进程空间无法访问
原文发表于百度空间,2010-01-02========================================================================== 玩过Sha ...
- 【旧文章搬运】Windows内核常见数据结构(驱动相关)
原文发表于百度空间,2008-7-24========================================================================== 这些是驱动中 ...
- 【旧文章搬运】深入分析Win7的对象引用跟踪机制
原文发表于百度空间及看雪论坛,2010-09-12 看雪论坛地址:https://bbs.pediy.com/thread-120296.htm============================ ...
- 【旧文章搬运】分析了一下360安全卫士的HOOK(二)——架构与实现
原文发表于百度空间及看雪论坛,2009-10-14 看雪论坛地址:https://bbs.pediy.com/thread-99460.htm 刚发这篇文章的时候,因为内容涉及360的核心产品,文章被 ...
随机推荐
- 【Java TCP/IP Socket】深入剖析socket——TCP套接字的生命周期
建立TCP连接 新的Socket实例创建后,就立即能用于发送和接收数据.也就是说,当Socket实例返回时,它已经连接到了一个远程终端,并通过协议的底层实现完成了TCP消息或握手信息的交换. ...
- Java中Class.this和this的区别(转)
当inner class(内部类)必顺使用到outer class(外部类)的this instance(实例)时,或者匿名内部类要使用外部类的实例. 例: class Outer{ String d ...
- 常见的哈希Hash算法 & MD5 & 对称非对称加密 & 海明码
参考 Link 另外,这篇文章也提到了利用Hash碰撞而产生DOS攻击的案例: http://www.cnblogs.com/charlesblc/p/5990475.html DJB的算法实现核心是 ...
- 静态NAT、动态NAT、PAT(端口多路复用)的配置
静态NAT.动态NAT.PAT(端口多路复用)的配置 NAT的实现方式有三种,即静态转换Static Nat.动态转换Dynamic Nat 和 端口多路复用OverLoad. 静态转换 ( ...
- [React] Create and import React components with Markdown using MDXC
In this lesson I demonstrate how to use the library MDXC to create and import React components with ...
- Windows-速度优化的几个方面
One. Win+R - > cmd- > msconfig 禁用不需要的启动项! Two. 关闭一些视觉选项 Three. 设置应用启动快捷键
- 关于颜色(color、background)
CSS3 HSL colors使用参考指南语法:<length> || <percentage> || <percentage>取值:<length> ...
- 【转载】VS工具使用——代码生成函数关系图
小引: 在上篇文章<VS工具使用--代码图>中,我向大家介绍了我对工具"代码图"的发现和认识.真是感觉当自己的眼睛不再被蒙蔽的时候,会发现整个世界的美好. ...
- 2015-03-12---外观模式,建造者模式(附代码),观察者模式(附代码),boost库应用
今天白天主要看了boost库的应用,主要是经常使用的一些库,array,bind,function,regex,thread,unordered,ref,smartpointers库,晚上看了看设计模 ...
- VS2013带来的"新特性"
VS2013除了引入"Bootstrap"库以外,最大的变化就是.net Framework 4.5下面的都不支持了.也就是说,假设不把.net库升级成.net Framework ...