【发布时间】:2019-12-24 00:10:54
【问题描述】:
如何强制我的链接器静态链接到 Windows.h,以便 Windows 库的所有函数都进入我的可执行文件?
我希望 API 调用(如 VirtualAllocEx、OpenProcess)和其他 API 调用(如写入另一个进程的内存等)以及 CreateRemoteThread(基本上所有通信 API 调用和内存分配调用)都在我的可执行文件中,所以我没有为它使用 Windows.h,所以基本上我的 IAT 不会包含这些功能,实现这一点的最佳方法是什么?
【问题讨论】:
-
感谢您的链接,但我怎样才能强制它静态链接 windows.h? @πάντα ῥεῖ
-
"如何强制它静态链接 windows.h?" - 这是没有意义的。 "Windows.h" 是一个header 文件,不是 一个库。它可能会从一个库(或许多不同库)中公开内容,但它本身并不是一个库。
-
@MeryTed 你的谷歌有什么问题吗?我添加了另一个链接。
-
@dedecos 即使在这种情况下,我们也可以解释 crt 库依赖于编译器,因为它包含运行编译器库函数(fopen、get、printf 等)所需的基本函数。一些编译器,如 MSVC,允许选择如何使用特定的行开关静态或动态地链接它们,因此他必须参考编译器文档。更难解释的是,由于技术原因,2的使用有所不同。 IE。选择静态链接不允许在同一进程空间中运行的 DLL 之间共享文件指针。
-
@πάνταῥεῖ再次您不能静态链接系统库因为每个 DLL 都使用共享部分来跟踪进程间仲裁并允许内核与用户代码交互而不会相互干扰过程。简而言之,实际情况要复杂得多。
标签: c++ c visual-studio linker static-linking