我可以从内存流加载库吗?例如,我的库被编码为文件。我检查一些条件并将文件解密为内存流。现在我需要将解密的库从该流加载到我的应用程序中并使用其功能等。
答案 0 :(得分:4)
在Windows中,只能从文件中加载DLL - 如链接所示,您可以创建一个ramdisk并将其安装为驱动器,但是无法通过存在的文件加载DLL在文件系统中。造成这种情况的部分原因是DLL被加载了#34;即系统不会立即将整个文件加载到内存中,它会加载实际使用的部分,4KB(通常)一次。它也没有交换到交换区域,如果系统内存不足,它只是被丢弃并从DLL重新加载。
Linux以非常类似的方式工作(我知道它默认使用相同类型的需求加载,但不确定是否有办法解决它),所以我不相信还有其他方法还有,但我还没有深入研究它。
当然,如果你想要的只是你可以在你的应用程序中使用的一段代码,并且你想将它作为加密/压缩/存储在你的exectuable文件中,你可以做的是分配一些可执行的内存(在Windows中,您可以使用VirtualAlloc
分配可执行内存)。但是,如果这样做,则需要确保在代码中重新定位任何绝对内存地址,因此需要将重定位信息存储在可执行文件中。
显然,简单的解决方案是将内容解压缩到文件系统中的文件中,然后从那里加载。