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

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

2009-8-3 03:30
9039


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

单独写

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

然后我

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

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

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



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

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

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

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

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

error C2065: 'xxxxxxxxxxxx' : undeclared identifier

而不是

error LNK2019: unresolved external symbol __imp__

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

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

最后说一下解决办法

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

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

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

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

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

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

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

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