首页
社区
课程
招聘
[求助]关于KeServiceDescriptorTable的疑惑
发表于: 2012-2-25 23:23 4728

[求助]关于KeServiceDescriptorTable的疑惑

2012-2-25 23:23
4728
请教各位大神
http://bbs.pediy.com/showthread.php?t=78218  这篇帖子中关于

#define GetSystemFunc(FuncName) KeServiceDescriptorTable.ServiceTableBase[*(PULONG)((PUCHAR)FuncName+1)]   
这句话的定义问题。
首先KeServiceDescriptorTable这个结构,小弟不知道是哪里被初始化的。
只有一句__declspec(dllimport)  SSDTEntry KeServiceDescriptorTable;  貌似是初始化
KeServiceDescriptorTable的,如果是的话,这样声明是编译器提供的功能么?

另外ServiceTableBase指向的就是SSDT么?
最后KeServiceDescriptorTable.ServiceTableBase[*(PULONG)((PUCHAR)FuncName+1)]
这句话中的*(PULONG)((PUCHAR)FuncName+1) 能转换成一个索引号么?
小弟不明白这个转化过程是如何做的。
哪位大神路过能帮小弟解答下吗,谢谢了。

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 342
活跃值: (55)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
2
KeServiceDescriptorTable 是指向内核中的 ssdt,是由系统初始化的
要使用的时候只是用 extern 语句导入来,就可以了
KeServiceDescriptorTable.ServiceTableBase[*(PULONG)((PUCHAR)FuncName+1)] 里面的*(PULONG)((PUCHAR)FuncName+1) 是可以换成索引号的,只是这样写更加方便一些
转换过程,你用反汇编工具看看随便一个 Zw 开始的函数,就知道了,转换的过程就是取函数代码的第二个字节,第二个字节就是你所说的索引号`
2012-2-25 23:27
0
雪    币: 154
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢,寂寞羽毛
按照你说的确实能解释的通。
但是__declspec(dllimport)  SSDTEntry KeServiceDescriptorTable; 这句还是不能理解。
KeServiceDescriptorTable 是一个系统规定的导出符号么?
2012-2-26 21:34
0
雪    币: 1787
活跃值: (340)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
KeServiceDescriptorTable 系统导出的一个变量。
2012-2-26 21:54
0
雪    币: 256
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
应该说32位下系统会导出 x64就没有导出了。
2012-3-21 11:55
0
游客
登录 | 注册 方可回帖
返回
//