首页
社区
课程
招聘
[求助]编写驱动时,无法解析内核API
2009-8-3 03:30 8423

[求助]编写驱动时,无法解析内核API

2009-8-3 03:30
8423


在编译驱动时,有的内核 API 可以使用,我专程实验了一下

单独写

DbgPrint("ZwOpenProcess :%08X ", ZwOpenProcess);  //没有任何问题,可以输出地址

然后我

DbgPrint("ReadVirtualMemory :%08X ",ZwReadVirtualMemory);

就出现错误了,
error LNK2019: unresolved external symbol __imp__ZwReadVirtualMemory@20 referenced in function...

不知道是哪里出了问题? 初学驱动,对此问题实在无解,



[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

收藏
点赞0
打赏
分享
最新回复 (15)
雪    币: 7651
活跃值: (493)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
achillis 15 2009-8-3 07:01
2
0
看ntoskrnl导出该函数没?导出了有声明没?这问题说白了跟内核根本扯不上关系…
雪    币: 7651
活跃值: (493)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
achillis 15 2009-8-3 07:03
3
0
另外,如果你看不懂编译的出错信息,还怎么学编程?学什么驱动啊…
雪    币: 6
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zjein 2009-8-3 12:12
4
0
我题目是无法解析内核API ,意思是为什么不能直接调用ZwReadVirtualMemory, 不过不知道你这样说是什么意思?

这样的回复如论坛公告所说: "请注意言行举止,不要让大家觉得不适!"

你质问我看不懂编程信息?你居然问我 导出了有声明没?

如果没有声明的话,出现的将是:

error C2065: 'xxxxxxxxxxxx' : undeclared identifier

而不是

error LNK2019: unresolved external symbol __imp__

不知道你怎么什么原因将我的问题提高到,还学什么编程?学什么驱动?

我在主题里面不是说了吗?  我是初学驱动 .

最后说一下解决办法

在 SOURCES 文件中加入 TARGETLIBS = $(DDK_LIB_PATH)\ntdll.lib
雪    币: 6
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zjein 2009-8-3 12:14
5
0
其实这个问题早有答案了,只怪我当时搜索时,搜索得不对,

一直搜索 error LNK2019 所以没找到答案
雪    币: 709
活跃值: (2240)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
sudami 25 2009-8-3 12:28
6
0
哎,路过.  声明一下就行了...
问个问题这么不谦虚,还盛气凌人的, ...
雪    币: 227
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
leivn 2009-8-3 12:41
7
0
低调,低调。。。
雪    币: 6
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zjein 2009-8-3 13:02
8
0
哎 !  人家说我学什么编程学什么驱动 ,感觉太悲伤了 ,情急了,盛气凌人是没有的

另外,这个不是声明的问题,是因为这个函数没有被导出,不是 error C2065

和谐!和谐!
雪    币: 612
活跃值: (761)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
zzage 1 2009-8-3 13:31
9
0
,ZwReadVirtualMemory没导出,你确定加个TARGETLIBS = $(DDK_LIB_PATH)\ntdll.lib就可以解决问题?不能获取到地址吧?应该只是通过编译吧...

再说achillis说了导出该函数没?导出了有声明没?..这没错,这本来就是学驱动最基础的东西...而且,你的问题也正是achillis说的函数没导出...
雪    币: 6
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zjein 2009-8-3 16:52
10
0
确实如你所说,只能通过编译, 加载的时候不能成功
雪    币: 7651
活跃值: (493)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
achillis 15 2009-8-3 18:23
11
0
驱动导入ntdll怎么可能加载成功呢?话可能不中听,本意是想劝你打好基础,少走弯路,因为这样的例子我已经见的太多了…
雪    币: 129
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
六月 2009-8-3 20:07
12
0
NtReadVirtualMemory函数导出的,你声明下就行了..
雪    币: 242
活跃值: (35)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
csijason 2009-8-3 20:40
13
0
路过~ 观注下 !

顺便提醒自己.
雪    币: 1227
活跃值: (907)
能力值: ( LV12,RANK:750 )
在线值:
发帖
回帖
粉丝
boywhp 12 2009-8-3 22:41
14
0
呵呵,要ntoskrn导出的才行啊,vc6的depends工具打开ntoskrn.exe看看内核函数名
ntdll的不能用的
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
sexyhuli 2009-8-4 15:25
15
0
借个地方,我也问点东西:

1. NTDDK.h里面声明的函数的实现,是不是在ntoskrnl.exe里?NTDLL里面是绝对不可能有把?

2. ntoskrnl.exe导出函数的原型和NTDLL里面的对应函数原型是一样的吗??有没有ntoskrnl.exe里面导出函数的介绍?
雪    币: 7651
活跃值: (493)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
achillis 15 2009-8-4 16:52
16
0
1.不完全正确吧,还有hal,但肯定不在ntdll里
2.Native API部分是一样的   ntoskrnl导出的函数有些在DDK里面有文档化的介绍,还有些没有介绍的参考WRK之类的东西吧
游客
登录 | 注册 方可回帖
返回