|
作者:Tesla.Angela
WIN32和WIN64在NTOSKRNL里差别最大的地方,非SSDT莫属。不过这个差别,说大也大,说不大也不大。主要在以下四个方面:1.WIN32上KeServiceDescriptorTable是导出的,WIN64上需要自己定位;2.WIN32的KeServiceDescriptorTable->ServiceTableBase记录了函数的完整地址,而WIN64上记录的则是“耍了花样的”偏移地址(在低四位里存放了函数的参数个数)。3.SYSTEM_SERVICE_TABLE的定义是一样的,但因为SIZE_T和PVOID的长度都是跟平台相关的,所以此结构体在WIN32上的长度是4*4=16,在WIN64上的长度是4*8=32。4.NT5X64和NT6X64的SSDT偏移地址的计算方法还有点不同,NT5是dwTmp & 0xfffffff0,NT6是dwtmp=dwtmp >> 4。综上所述,整理出了适合所有NT平台的代码。
|
|