【发布时间】:2016-06-01 06:24:47
【问题描述】:
我最近正在对私有 API 进行一些研究。我尝试在运行时使用LoadLibrary 和GetProcAddress 在ntdll.dll 中调用诸如NtOpenFile 之类的函数。幸运的是,它成功了。今天早上我在我的电脑上进行了文件搜索,在我的 C 盘中找到了ntdll.lib。据我所知,这样的 .lib 文件应该包含可用于链接的 dll 导出的存根。因此,我尝试将我的应用程序链接到该库,但我不断收到unresolved external symbol 错误。但是,dumpbin /EXPORTS 表明 ntdll.lib 清楚地导出了 NtOpenFile。我该如何解决这个错误?
【问题讨论】:
-
你不能静态链接到 NtDll。您已经以正确的方式进行操作,调用
LoadLibrary和GetProcAddress。 -
但是
ntdll.ib的意义何在?如果我们不能静态链接到它,它为什么会存在? -
lib 可以被链接,但是你必须有一个头文件来给你所有的函数定义。
-
问题是,VS 和 CodeBlock 对我大喊大叫说找不到 NtOpenFile 符号。 @LPs
-
错了,现在有 ntdll 导入库(带有完整的头文件)可用。默认设置 Windows SDK 是的。
标签: c visual-studio dll window