我可以从内存流加载库吗
Can I load a library from a memory stream?
我可以从内存流加载库吗?例如,我的库被编码为一个文件。我检查了一些条件,并将文件解密为内存流。现在,我需要将解密后的库从该流加载到我的应用程序中,并使用其功能等。
在windows中,DLL只能从文件加载-正如链接所建议的,您可以创建一个ramdisk并将其作为驱动器安装,但无法绕过需要通过文件系统中存在的文件加载的DLL。部分原因是DLL是"按需加载"的,即系统不会一次将整个文件加载到内存中,而是加载实际使用的部分,每次4KB(通常)。它也不会交换到交换区域,如果系统内存不足,它只是被丢弃并从DLL重新加载。
Linux的工作方式非常相似(我知道它默认情况下使用相同类型的需求加载,但不确定是否有办法绕过它),所以我也不相信有任何其他方法,但我还没有深入研究它。
当然,如果你只想要一段可以在应用程序中使用的代码,并且你想将其以加密/压缩/其他形式存储在可执行文件中,那么你可以分配一些可执行内存(在Windows中,你可以使用VirtualAlloc
来分配可执行内存)。但是,如果这样做,您需要确保重新定位代码中的任何绝对内存地址,因此您需要将重新定位信息存储在可执行文件中。
显然,简单的解决方案是将内容解压缩到文件系统中的一个文件中,然后从那里加载。
相关文章:
- 原子加载和存储与内存顺序放宽
- 如何从内存缓冲区加载张量流图
- 我在 IDA 或 dbg 或 olly 上看到的内存是否与我在 RAM 上实时加载的内存相同?
- 从C/C++(Win64)中的内存加载64位DLL
- 对外部函数的调用是否强制从内存加载
- 将使用 4 或 8 个对齐规则将加载处理到内存中
- C++:类如何将自身加载到内存中以递增全局变量?
- 加载字节数组(从内存)到libpng c
- 将内存保存到文件并加载它而不必解析数据?
- 加载时间,遍历时间,不同数据段C/C 的内存使用率
- 急切地加载整个模型以估计张量流的内存消耗
- 延迟加载的 DLL 在内存中彼此相距太远
- 使用 DX11 加载 2D 纹理时内存泄漏
- 如何在单独的线程上加载纹理到主内存并使用它在另一个线程上渲染
- 使用C++原子库,我应该使用什么样的内存顺序进行加载,然后进行比较交换
- 当某些错误可以接受时,顺序加载存储原子的内存顺序应该是什么
- 从内存而不是URL动态加载QML
- sqlite3数据库加载到内存c++并选择perfomance
- 从Magick++图像中加载内存(libharu)中的图像
- 无法从eclipse(C++/CDT)中指定的地址加载内存