10

我可以从内存流中加载库吗?例如,我的库被编码为一个文件。我检查了一些条件并将文件解密为内存流。现在我需要将该流中的解密库加载到我的应用程序中并使用它的功能等。

4

1 回答 1

5

在 Windows 中,只能从文件加载 DLL - 正如链接所建议的那样,您可以创建一个 ramdisk 并将其安装为驱动器,但是没有办法绕过需要通过文件系统中存在的文件加载 DLL . 造成这种情况的部分原因是 DLL 是“按需加载”的,即系统不会一次将整个文件加载到内存中,而是加载实际使用的部分,一次 4KB(通常)。它也不会被换出到交换区域,如果系统内存不足,它只会被丢弃并从 DLL 重新加载。

Linux 以非常相似的方式工作(我知道它默认使用相同类型的按需加​​载,但不确定是否有解决方法),所以我也不相信有任何其他方式,但我没有深入研究它。

当然,如果您想要的只是一段可以在应用程序中使用的代码,并且您希望将其作为加密/压缩/任何内容存储在可执行文件中,那么您可以做的是分配一些可执行内存(在 Windows 中,您可以使用它VirtualAlloc来分配可执行内存)。但是,如果这样做,您需要确保重定位代码中的任何绝对内存地址,因此您需要将重定位信息存储在可执行文件中。

显然,简单的解决方案是将您的内容解压缩到文件系统中的一个文件中,然后从那里加载。

于 2013-08-20T10:29:23.940 回答