前面对 PEB 的相关结构和其中的重要成员进行了分析和学习,现在开始真正进入
内核,学习内核中的一些结构.
这个 EPROCESS 结构在 ntddk.h 中有定义,但是并未给出具体的结构,因此要得
到 EPROCESS 中一些重要的成员变量,只能通过偏移的方法,比如 PID,ImageName
等.这些偏移可以在 Windbg 中 dt _EPROCESS 得到,但是不公开感觉还是不爽,
而且这东西在不同的系统版本中不一样,如果要兼容的话,就必须先判断操作系
统版本.
在此程序中用到的相关偏移如下:
#define EPROCESS_ACTIVELIST_OFFSET 0x88 //活动进程链
#define EPROCESS_PID_OFFSET
0x84 //PID 了
#define EPROCESS_IMAGENAME_OFFSET 0x174 //映像名称
#define EPROCESS_FLINK_OFFSET 0x88 //双
链表的前向指针
#define EPROCESS_BLINK_OFFSET 0x8C //双
链表的后向指针
由于是第一次写驱动,有些写法还不太清楚,下面的代码参考了别人的一些.
VOID ShowEPROCESS(void)
{
DWORD EProcess,FirstEProcess;
LIST_ENTRY* ActiveProcessLinks;
DWORD pid,dwCount=0;
PUCHAR pImage;
PPROCESS_INFO ProcessInfo={0};
EProcess=FirstEProcess=(DWORD)PsGetCurrentProcess();
//pid=*(DWORD*)((char*)EProcess+EPROCESS_PID_OFFSET);
__try {
while ( EProcess!= 0)
{
dwCount++;
pid= *( (DWORD*)( EProcess + EPROCESS_PID_OFFSET ) );
pImage= (PUCHAR)( EProcess +
EPROCESS_IMAGENAME_OFFSET ) ;
DbgPrint ( "[Pid=%8d] EProcess=0x%08X %s", pid,
EProcess, pImage) ;
ActiveProcessLinks = (LIST_ENTRY*) ( EProcess +
EPROCESS_FLINK_OFFSET ) ;
EProcess = (DWORD)ActiveProcessLinks->Flink -
EPROCESS_FLINK_OFFSET ;
if ( EProcess == FirstEProcess )
评论0