-
-
[求助]关于句柄表的NextHandleNeedingPool 的疑问
-
-
[求助]关于句柄表的NextHandleNeedingPool 的疑问
最近看FUTo,在抹句柄处发现一点问题,如下:
1. 网上找到的_HANDLE_TABLE结构的NextHandleNeedingPool 表示在分配下一层句柄表之前可以容纳的最大句柄数。问题在这,windbg里查看的csrss.exe(只有一层)的这个是0x800,我写的程序运行的XP页表大小是4K,也就是说一页容纳的最大句柄数是0x1000 / 8 = 0x200
相差了4倍,请问这个是为何?是否我哪里理解错了。。。我理解的TableCode 是指向一页的,当一页不够容纳所有的句柄才去分层,是否理解有误?
2. FUTo里这样遍历了句柄表让我很纳闷:
if (i_numTables == 0) // 只有一层的句柄
{
p_tableEntry = (PTABLE_ENTRY)((DWORD)orig_tableEntry & 0xfffffff8);
for (a = 0; a < i_hperPage; a++)
{
if (((p_tableEntry[a].object ^ 0x80000000) & 0xfffffff8) == ((DWORD)tarHandle - 0x18))
{
p_tableEntry[a].object = 0;
p_tableEntry[a].security = 0;
}
}
}
这里有个问题是:如果句柄表后面有空的,那么应该会直接蓝屏吧?虽然这里在查找之前作者可以保证是一定能找到的,但是没有完善的处理感觉还是不负责的,只是个人看法。。
以下是图片
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课