首页
社区
课程
招聘
[旧帖] [求助]pspcidtable学习中的问题 0.00雪花
发表于: 2009-6-12 10:01 3777

[旧帖] [求助]pspcidtable学习中的问题 0.00雪花

2009-6-12 10:01
3777
ExEnumHandleTable的回调函数typedef BOOLEAN (*EX_ENUMERATE_HANDLE_ROUTINE)(
IN PHANDLE_TABLE_ENTRY HandleTableEntry,
IN HANDLE Handle,
IN PVOID EnumParameter
    );

这第3个参数IN PVOID EnumParameter是做什么的

我在看别人的文章时候看到在回调函数中使用(*(ULONG*)EnumParameter)++;
我在测试代码的时候发现使用这句后蓝屏。。

网上代码大体如下
BOOLEAN MyEnumerateHandleRoutine(
     IN PHANDLE_TABLE_ENTRY HandleTableEntry,
     IN HANDLE Handle,
     IN PVOID EnumParameter
     )
{
    BOOLEAN Result=FALSE;
    ULONG ProcessObject;
    ULONG ObjectType;

     ProcessObject=(HandleTableEntry->Value)&~7; //掩去低三位
     ObjectType=*(ULONG*)(ProcessObject-0x10);//取对象类型
         __try{
                 if (ObjectType==(ULONG)PsProcessType)//判断是否为Process
                 {
                                                //应该是下面这句异常了吧。。。
                         //(*(ULONG*)EnumParameter)++;
                         //注意PID其实就是Handle,而不是从EPROCESS中取,可以对付伪pid
                         DbgPrint("PID=%4d\t EPROCESS=0x%08X\n",Handle,ProcessObject);
                 }
         }
         __except(1)
         {DbgPrint("except"); }
    return Result;//返回FALSE继续
}

另外这句代码if (ObjectType==(ULONG)PsProcessType)//判断是否为Process
是否应该是if (ObjectType==*(ULONG*)PsProcessType)

谢谢各位

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
2
代码是我写的…
2009-6-12 12:58
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
3
那个是调用时传入的一个参数指针,就像CreateThread时传入的参数指针一个道理。
2009-6-12 13:01
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
4
手机上网不太方便,看来你没有理解回调函数的原理啊,第二个问题你可以自行验证
2009-6-12 13:07
0
雪    币: 183
活跃值: (203)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
哦~~,谢谢,我明白了第一个问题了
ExEnumHandleTable(PspCidTable,MyEnumerateHandleRoutine,NULL,&hLastHandle);
我传入的是NULL,对他进行(*(ULONG*)EnumParameter)++; 就异常了。。。

第2个问题我试验结果应该是if (ObjectType==*(ULONG*)PsProcessType)
在网上查了一会,有这样写的
#ifdef _NTDRIVER_
extern POBJECT_TYPE *PsProcessType;
#else
extern POBJECT_TYPE PsProcessType;
#endif // _NTDRIVER

这东西是指针,还是指向指针的指针。。。
2009-6-12 16:12
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
6
根据我用的时候的经验,是POBJECT_TYPE
2009-6-12 20:49
0
雪    币: 183
活跃值: (203)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
恩,谢谢achillis大牛的大力支持~~
我明白了~
2009-6-14 19:32
0
游客
登录 | 注册 方可回帖
返回
//