首页
社区
课程
招聘
[求助]遍历EPROCESS链出现的问题
发表于: 2009-2-25 20:59 5142

[求助]遍历EPROCESS链出现的问题

2009-2-25 20:59
5142
今天试着写一个简单的通过EPROCESS遍历系统所有进程的程序
代码如下
#include <ntddk.h>

#define UNIQUEPROCESSID		0x84
#define ACTIVEPROCESSLINKS	0x88
#define IMAGEFILENAME		0x174

VOID Unload (PDRIVER_OBJECT DriverObject)
{
	DbgPrint("Unload Routine.\n");
}

VOID EnumProcessFromEPROCESS (ULONG pe)
{
	ULONG cur = pe;
	ULONG cnt = 0;

	do
	{
		cnt ++;
		DbgPrint("eprocess: %08x\n", cur);
		DbgPrint("PID: %d NAME: %s\n", *(PULONG)(cur+UNIQUEPROCESSID), (PUCHAR)(cur+IMAGEFILENAME));
		cur = *(PULONG)(cur+ACTIVEPROCESSLINKS) - ACTIVEPROCESSLINKS;
	} while (cur != pe);

	DbgPrint("Total %d processes founded.\n", cnt);
}

NTSTATUS DriverEntry (IN PDRIVER_OBJECT DriverObject,
					  IN PUNICODE_STRING RegistryPath)
{
	ULONG pEpro;

	DriverObject->DriverUnload = Unload;

	pEpro = (ULONG)PsGetCurrentProcess();

	EnumProcessFromEPROCESS(pEpro);

	return STATUS_SUCCESS;
}


代码很简单 就是遍历链表而已
然而得到的结果却令人感到奇怪
如下图



第一: 显示有85个进程 我的系统并没有运行这么多进程啊!
上面有很多重复的进程不知道为什么也在链表中,还有一些进程并没有运行也在链表中。
不解~~

第二: 看倒数第三行,这个EPROCESS显示不出PID和NAME,但它就是在链表中,也不知道这个是什么,还望解答,不胜感激!

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
收藏
免费 1
支持
分享
最新回复 (6)
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
2
你要判断一下进程的状态,有些可能是已经死掉的进程,可通过ObjectTable是否为0来判断。至于你说的那个奇怪进程,其实是PsActiveProcessHead,即eprocess双链的链表头而已,并不处于一个真正的eprocess中。
2009-2-25 21:11
1
雪    币: 222
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
为什么已经死掉的进程还在链表上?
2009-2-25 22:38
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
4
比如GetExitCodeProcess,需要从已退出进程的eprocess中取值啊,可能是为了保证对这些函数的支持吧
2009-2-26 06:35
1
雪    币: 222
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
学习! 多谢指点
2009-2-26 10:46
0
雪    币: 220
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
为什么已经死掉的进程还在链表上
2009-2-27 09:09
0
雪    币: 222
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
4L已经回答了嘛 呵呵
2009-2-27 09:32
0
游客
登录 | 注册 方可回帖
返回
//