我有一個加密的圖像文件。現在我的程序將讀取加密文件並在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查看器 –