首页
社区
课程
招聘
[求助]win2k3 x64 SSDT函数地址?求内核大牛解惑
发表于: 2016-2-5 18:00 4055

[求助]win2k3 x64 SSDT函数地址?求内核大牛解惑

2016-2-5 18:00
4055
win7 x64 SSDT 偏移计算公式是
SSDT基址+表项值>>4

2003 x64呢?
在网上看说2003上偏移的计算是
SSDT基址+表项值&0xFFFFFFF0

win7 x64下我的计算方法如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
typedef struct _SSDTStruct
{
    LONG* pServiceTable;
    PVOID pCounterTable;
#ifdef _WIN64
    ULONGLONG NumberOfServices;
#else
    ULONG NumberOfServices;
#endif
    PCHAR pArgumentTable;
}SSDTStruct,pSSDTStruct;
 
PVOID SSDT::GetFunctionAddress(const char* apiname,int SsdtIndex)
{
    //read address from SSDT
    pSSDTStruct SSDT = (pSSDTStruct)GetKeServiceDescriptorTable64();
    if (!SSDT)
    {
        return 0;
    }
    ULONG_PTR SSDTbase = (ULONG_PTR)SSDT->pServiceTable;
    if (!SSDTbase)
    {
        return 0;
    }
#ifdef _WIN64
    return [COLOR="Red"](PVOID)(((SSDT->pServiceTable[SsdtIndex] >> 4) + SSDTbase);[/COLOR]
 
#else
    return (PVOID)SSDT->pServiceTable[SsdtIndex];
#endif
}

win7 x64的计算结果没问题,但是2003 64位结果怎么都不对
求大牛指点?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费
支持
分享
最新回复 (1)
雪    币: 78
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
调试了下
还是Nt函数和Zw函数地址的理解问题,汗了
ln nt!KiServiceTable+(poi(nt!KiServiceTable+4*<syscall nbr>)&0x00000000`ffffffff)
这是2003 x64的公式
2016-2-5 18:32
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册