正如问题所说,我想从内存中的位置而不是文件中加载 DLL,类似于 LoadLibrary(Ex)。我不是 WinAPI 方面的专家,所以在谷歌上搜索了一下,发现 这篇文章 和 MemoryModule 库几乎可以满足我的需求。
另一方面,那里的信息很旧,图书馆也有一段时间没有更新了。所以我想知道是否有不同的、更新的和更好的方法来做到这一点。另外,如果有人使用了文章中提到的库,他们能否提供有关我在使用它时可能面临的问题的见解?
只是为了好奇,我正在探索为应用程序加密一些插件而不将解密版本存储在磁盘上的概念。
原文由 Saulius Žemaitaitis 发布,翻译遵循 CC BY-SA 4.0 许可协议
好吧,您可以根据 这些说明 创建一个 RAM 驱动器,然后将您可以在内存中的 DLL 复制到那里的文件并使用 LoadLibrary()。
当然,如果您打算将其部署为某种产品,这不是很实用,因为人们会注意到正在安装驱动程序,安装后重新启动以及“我的电脑”下的新驱动器号。此外,这并没有真正隐藏 DLL,因为它只是放在 RAM 驱动器中供所有人观看。
我感兴趣的另一件事是你为什么要这样做?也许您的最终结果可以通过从内存加载 DLL 以外的其他方式来实现。例如,当使用诸如 UPX 之类的二进制打包程序时,磁盘上的 DLL 与最终执行的 DLL 不同。在使用 LoadLibrary 正常加载 DLL 后,解包器立即启动并使用未压缩的二进制文件重写 DLL 加载到的内存(DLL 标头确保分配了足够的空间)