我有一个加密的图像文件。现在我的程序将读取加密文件并在char数组中创建图像。现在我的问题是我需要用一些图像浏览器打开图像,而无需将图像文件写入硬盘。它应该是可能的,因为图像数据已经加载到内存中。从内存加载文件
从内存加载文件
回答
我不知道任何能够从内存区域加载图像的图像查看器。即使您要创建自己的图像查看器,也必须共享存储器区域,否则出于安全原因,查看器很可能无法访问程序存储器。
一个妥协方法是将图像写入硬盘上的临时目录,用图像查看器打开它,并用随机数据覆盖它并在使用后删除文件(对于小文件,甚至可以在图像查看器完成加载)。
从你写的内容来看,你似乎希望避免将解密后的数据写入硬盘,这很好,因为写入硬盘的数据在关机后仍然存在,而RAM中的数据获胜没有生存。但是正如JasonD在他的评论中指出的那样,这可能会导致错误的安全感 - 操作系统可以随时将内存区域移动到虚拟内存中(这对硬盘也是如此)。
编辑:打开一个内存区域可能是可能的,例如,你可以试用hex editor HxD - 它可以打开和编辑进程分配的内存区域,但我不知道它是如何实现的。
感谢您的建议。是否可以打开我的内存块作为一个新的驱动器 –
只有一种方法可以做到,它绝对不是简单的!您需要一个过滤器dirver将virtaul文件系统链接到用户空间。您可以查看“dokan”项目以获取更多信息。
如果这是一个罗科梅项目,你应该很福美来与NTFS驱动程序,因为我觉得,不支持杜坎。
我使用它,它工作正常,但我花了三个月左右进入这个东西。
如果它不是一个“高安全性应用程序”,您可以使用临时文件。
正如指出的其他人,该数据存在于内存中的事实,给你什么,除非图片浏览器通过进程间通信机制,支持加载图像(我还没有看到这样的浏览器)。
那么你的选择是使用一些图像浏览库C++(它可以是一个完美的选择,BTW),或创建一个虚拟磁盘。
关于内存交换到磁盘 - 你可以标记内存unswappable,但你需要确保这些存储块可分配(对于大图像,这将是不可能的)。
您可以创建一个虚拟磁盘,这将暴露存储在RAM中的数据,但你需要为这个内核模式的虚拟磁盘驱动器。这需要在内核模式开发方面的丰富经验。我们公司提供几种产品(SolFS操作系统版本,CallbackDisk),您可以使用它来完成任务,并且几乎不需要编程即可获得加密的内存存储。
- 1. ImageMagick php imagick从内存加载文件
- 2. 内存和文件加载c + +?
- 3. 加载ELF文件到内存
- 4. 加载.mat文件 - 内存不足
- 5. 将xml文件加载到内存中
- 6. 从内存加载PDF ASP.Net
- 7. 加载从全局内存
- 8. 从内存加载图像
- 9. XNA:从子文件夹加载内容
- 10. 无法从文件URI加载内容
- 11. FileTextureProvider仅从“内部”加载文件
- 12. 当从文件加载而不是URL加载时,内存泄露UIWebView?
- 13. 加载EXE文件并从内存中运行
- 14. 如何从内存中加载matlab MAT文件?
- 15. ChaiScript:从内存中加载预处理的脚本文件
- 16. WebView不从内部存储器加载文件
- 17. 从Android的内部存储加载文件
- 18. 从内部存储器读取文件并加载到ImageView中
- 19. 将从互联网加载的文件更改为从内部存储器加载的文件
- 20. C++保存/加载双(到/从文件)
- 21. 从plist文件保存/加载数组
- 22. 将文本文件加载到内存并分析其内容
- 23. 加载XML文件和加载内容
- 24. 如何从文件夹加载文件到内存流缓冲区
- 25. Word COM/OLE/VBA:如何从内存保存/加载文档?
- 26. 加载/保存.ini文件
- 27. 下载文件并保存到内存
- 28. Log4j加载内存?
- 29. 在android中,从外部存储文件还是从内部存储文件加载的速度更快?
- 30. Rails - 从yaml文件加载内容的文件路径
'这应该是可能的,因为图像数据已经加载到内存中。'这是一个大胆的说法。内存不是一个大的free-for-all - 一个进程拥有的内存通常是_quite故意不能从另一个进程访问。你必须编写一个图像查看器,该图像查看器专门用于与读取的程序进行交互。硬盘解决了这个问题。 –
你是否为你的浏览器编码? – marscode
不,我需要通过一个数据地址或东西到pc的默认jpg查看器 –