-
-
KeServiceDescriptorTable中找不到地址
-
发表于:
2011-5-12 20:16
4038
-
KeServiceDescriptorTable中找不到地址
各位大牛们,谁有空来帮帮我呗,先谢谢了,问题如下:
我想Hook 函数ZwOpenProcess,打算用sstd方式,看雪论坛上例子里也有。
我现在就有些疑问,KeServiceDescriptorTable结构如下:
typedef struct ServiceDescriptorEntry {
unsigned int *ServiceTableBase;
unsigned int *ServiceCounterTableBase; //Used only in checked build
unsigned int NumberOfServices;
unsigned char *ParamTableBase;
} ServiceDescriptorTableEntry_t, *PServiceDescriptorTableEntry_t;
__declspec(dllimport) ServiceDescriptorTableEntry_t KeServiceDescriptorTable;
按照我的理解,NumberOfServices的数值代表函数的个数,ServiceTableBase中是这些函数的地址。
我通过windbg查看ZwOpenProcess的地址是804de044,但是我遍历ServiceTableBase中的所有数据也没有发现有地址804de044,这是为什么呢?还是我的理解有偏差?
方式如下:
ULONG zwop = (ULONG)ZwOpenProcess, temp;
for(i = 0; i < KeServiceDescriptorTable.NumberOfServices; i++)
{
temp = (ULONG)((PULONG)KeServiceDescriptorTable.ServiceTableBase + i);
KdPrint(("%0x", temp));
if(temp == zwop)
KdPrint(("has found the result !"));
}
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!