gpt4 book ai didi

c - 链接到 ntdll.lib 并调用 ntdll.dll 中的函数

转载 作者:太空宇宙 更新时间:2023-11-04 01:55:09 34 4
gpt4 key购买 nike

我最近在研究私有(private) API。我尝试在运行时使用 LoadLibraryGetProcAddress 调用 ntdll.dll 中的 NtOpenFile 等函数。幸运的是,它成功了。今天早上我在我的计算机上执行了文件搜索,并在我的 C 盘中找到了 ntdll.lib。据我所知,这样的 .lib 文件应该包含可用于链接的 dll 导出 stub 。因此,我尝试将我的应用程序链接到该库,但我不断收到 unresolved external symbol 错误。但是,dumpbin/EXPORTS 显示 ntdll.lib 显然导出了 NtOpenFile。我该如何解决这个错误?

最佳答案

不再是这种情况,你可以找到 ntdll.lib 导入库和 NT header ,因为我在 2019 年写了这篇文章。

GetProcAddress() 方法需要很多额外的代码。当然,直接导入更简洁,并且是我们用于 C/C++ 桌面应用程序的模式。

我过去常常通过使用 .def 文件等创建一个简单的 Windows DLL 项目来制作我自己的“ntdll.lib”导入库。一次添加每个 ntdll API 函数,因为我需要它们作为 stub 和用于头文件。丢弃 .dll,仅使用其中的 .lib。

但至少从 MSVC 2017 开始,它包括用户模式(用于桌面应用程序)ntdll.lib 库,用于 32 位和 64 位版本的 x86 和 ARM。这可能需要安装 Windows 10 WDK。只需在“C:\Program Files (x86)”中搜索“ntdll.lib”,您就会找到它们。

然后在标题前面,很多 ntdll 原型(prototype)和定义都在“winternl.h”中,但不幸的是很多部分都丢失了和/或只有结构的简化版本等。要解决这个问题,您可以使用“Process Hacker”项目中出色的 NT header 集: https://github.com/processhacker/processhacker header 在“phnt”中。

您将使用:

而不是典型的“windows.h”和“winternl.h”组合
#include <phnt_windows.h>
#include <phnt.h>

然后将特定的 Windows 10 作为目标(默认为 Windows 7),您将遵循:

#undef PHNT_VERSION
#define PHNT_VERSION PHNT_THRESHOLD

请注意“phnt_windows.h”已经为您包含了“windows.h”。因此,您应该能够在任何其他 Windows、stdlib、STL 等之后跟随它;与典型的桌面构建环境没有太大区别。

或其他一些使用:
https://github.com/Fyyre/ntdll
还包括库:
https://github.com/x64dbg/ScyllaHide/tree/master/3rdparty/ntdll
还有一个也有 ntdll 库:
https://github.com/odzhan/injection/tree/master/ntlib

关于c - 链接到 ntdll.lib 并调用 ntdll.dll 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35509388/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com