首页
社区
课程
招聘
[求助]无法导出KeServiceDescriptorTable
发表于: 2010-9-23 20:42 12367

[求助]无法导出KeServiceDescriptorTable

2010-9-23 20:42
12367
用的是vc2008 的wdk编译   主要代码如下:
#include <ntddk.h>

typedef struct _ServiceDescriptorTable {
PVOID ServiceTableBase; //System Service Dispatch Table 的基地址  
PVOID ServiceCounterTable;
//包含着 SSDT 中每个服务被调用次数的计数器。这个计数器一般由sysenter 更新。
unsigned int NumberOfServices;//由 ServiceTableBase 描述的服务的数目。  
PVOID ParamTableBase; //包含每个系统服务参数字节数表的基地址-系统服务参数表
}*PServiceDescriptorTable;  
extern PServiceDescriptorTable KeServiceDescriptorTable;

在cpp中定义:long addr1=(long)KeServiceDescriptorTable->ServiceTableBase ;

编译器报错: error LNK2001: unresolved external symbol "struct _ServiceDescriptorTable * KeServiceDescriptorTable" (?KeServiceDescriptorTable@@3PAU_ServiceDescriptorTable@@A)

经过多次测试,只要用到KeServiceDescriptorTable的地方就出现上面的报错,在线等高手们指点该怎么修改

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (16)
雪    币: 229
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
typedef struct _ServiceDescriptorTable {
PVOID ServiceTableBase; //System Service Dispatch Table 的基地址  
PVOID ServiceCounterTable;
//包含着 SSDT 中每个服务被调用次数的计数器。这个计数器一般由sysenter 更新。
unsigned int NumberOfServices;//由 ServiceTableBase 描述的服务的数目。  
PVOID ParamTableBase; //包含每个系统服务参数字节数表的基地址-系统服务参数表
}ServiceDescriptorTable,*PServiceDescriptorTable;

__declspec(dllimport)  ServiceDescriptorTable KeServiceDescriptorTable;
2010-9-23 21:04
0
雪    币: 168
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
测试了,通不过,错误提示:error LNK2001: unresolved external symbol "struct _ServiceDescriptorTable * KeServiceDescriptorTable" (?KeServiceDescriptorTable@@3PAU_ServiceDescriptorTable@@A)
2010-9-23 21:08
0
雪    币: 229
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
是这个:
__declspec(dllimport)  ServiceDescriptorTable KeServiceDescriptorTable;
不是这个
__declspec(dllimport) PServiceDescriptorTable KeServiceDescriptorTable;
2010-9-23 21:21
0
雪    币: 168
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
测了,一样的通不过,不懂怎么回事,去掉long addr1=(long)KeServiceDescriptorTable->ServiceTableBase ;
就编译通过
2010-9-23 21:26
0
雪    币: 168
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
奇怪了,这些代码拿到dos版本下去编译可以能过,为什么在2008里不行呢
2010-9-23 21:47
0
雪    币: 168
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
没招了,好不容易架好了2008ddk,难不成又回到dos版本去编,烦,有人会的吗,教教我啊
2010-9-23 22:12
0
雪    币: 962
活跃值: (1681)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
..驱动的文件名要用.c 而不是.cpp
?KeServiceDescriptorTable@@3PAU_ServiceDescriptorTable@@A 是c++类型
2010-9-23 22:41
0
雪    币: 168
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
是2008自动生成的,这个应该没错,建其它设备都没问题,就这个extern出了问题
2010-9-23 22:45
0
雪    币: 168
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
没招了,晕啊,弄了一个晚上了还不行
2010-9-23 23:00
0
雪    币: 168
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
没有人知道怎么解决吗
2010-9-24 01:12
0
雪    币: 249
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
前面人已经给出答案了
extern "C"
2010-9-24 21:26
0
雪    币: 249
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
另外建议就拿 VS 当做代码编辑器用,编译还是用 WDK 命令行吧。。。
2010-9-24 21:26
0
雪    币: 168
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
正解,最后是用extern "C"解决,要关掉平台后再加才行,在错误的是候加extern 不一定行,可能是我电脑中毒或是平台的一个漏洞
2010-9-25 23:18
0
雪    币: 8865
活跃值: (2379)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
15
话说,我一直很喜欢脚本编译模式~VS只是一个IDE而已,何必在乎~
据说某些神人喜欢拿notepad写代码~~
2010-9-25 23:59
0
雪    币: 998
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
喜欢用notepad++写代码。插件很强大。
2010-9-26 00:49
0
雪    币: 28
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
明显是链接器找不到,标示符实体所在位置,加上静态库就行了
#pragma comment(lib,"ntoskrnl.lib")
2010-11-27 10:48
0
游客
登录 | 注册 方可回帖
返回
//