メモリストリームからライブラリをロードできますか?たとえば、私のライブラリはファイルにエンコードされています。私はいくつかの条件を確認し、ファイルをメモリストリームに解読します。今度は、そのストリームから解読されたライブラリを自分のアプリケーションにロードし、その機能を使用する必要があります。メモリストリームからライブラリをロードできますか?
答えて
Windowsでは、DLLはファイルからのみロードできます - リンクが示唆しているように、ドライブとして使用することができますが、DLLの周りにファイルシステムに存在するファイルをロードする必要はありません。この理由の1つは、DLLが「デマンドロード」されていることです。つまり、システムがファイル全体を一度にメモリにロードせず、実際に使用されているパーツ、つまり4KB(通常は一度に)をロードします。スワップ領域にもスワップアウトされません。システムがメモリ不足の場合、破棄されてDLLから再ロードされます。
Linuxは非常に似たような方法で動作します(デフォルトでは同じ種類のデマンドロードを使用していますが、周囲に道があるかどうかはわかりません)ので、そこに他の方法はないと思いますいずれにしろ、私はそれを深みで調べていない。
もちろん、アプリケーションで使用できるコードがあり、それを暗号化/圧縮/その他のファイルとして保存したい場合は、実行可能なメモリをいくつか割り当てることができます(Windowsでは、VirtualAlloc
を使用して実行可能メモリを割り当てることができます)。ただし、絶対メモリアドレスをコード内で再配置する必要があるため、実行可能ファイルに再配置情報を格納する必要があります。
明らかに、簡単な解決策は、コンテンツをファイルシステム内のファイルに解凍し、そこからロードすることです。
ramdiskよりはるかに優れた解決策はhttps://github.com/fancycode/MemoryModuleを参照してください(「良い」または「良い」解決策がある場合は、最初から試してみることをお勧めしません) )。 – Damon
@Damon:それは私が3つ目の段落で説明していることを、私が言うことができるものから(私はすべてのコードを詳しく解説していない)やっています。 –
@MatsPeterson:はい、まさにそれはそうです。これは、私が数年前に試した実用的な実装で、OPが望んでいる「RAMディスク」アプローチよりも若干優れています(とにかく、RAMディスクから暗号化されていないファイルを読み込めるからです)。もちろん、VM管理に真剣に干渉し、共有ライブラリのコンセプトといくぶん矛盾するので、私はまだそれを改ざんすることをお勧めしません。 DLLをファイルベースにするということは、同じページをいくつかのプロセスにマップして投げ捨て、必要に応じてリロードできることです。 – Damon
- 1. MemoryClassLoaderからライブラリをロードしますか?
- 2. 文字列をメモリストリームに変換する - メモリストリームは展開できませんか?
- 3. メモリストリームからビデオファイルを再生
- 4. Prolog-ファイルからライブラリをロードする
- 5. メモリから動的ライブラリをロードする
- 6. knockout.js javascriptライブラリからウィジェットをロードする
- 7. コードイグナイターライブラリ内からライブラリをロードしますか?
- 8. メモリストリームからファイルを開く方法
- 9. libtoolがライブラリをロードできません
- 10. ライブラリRMySQLをロードできません
- 11. メモリストリームからのZipファイルの作成C#
- 12. SQLiteOpenHelperは外部ファイルからテーブル・スクリプトをロードできますか?
- 13. ANTでjarライブラリからjava premain-classをロード
- 14. 'メモリストリームは展開できません'が、配列のサイズは同じですか?
- 15. pyflixライブラリはどこからダウンロードできますか?
- 16. ResponseStreamからメモリストリームを作成するメモリ不足例外
- 17. メモリストリームでシリアライズ/デシリアライズ
- 18. CLI C++アプリケーションからライブラリ内にC#WPFフォームをロードする
- 19. パッケージ内のpackratライブラリから依存関係をロードする
- 20. ライブラリ内のアプリケーションからのリソースファイルをandroidにロードする
- 21. Common Lispでライブラリをロードするにはどうしたらいいですか?
- 22. Monoでアセンブリから型をロードできませんでした
- 23. 静的ライブラリを介してカスタムバンドルからXIBをロード
- 24. Indy 10 - IdHTTP.Get "SSLライブラリをロードできませんでした"
- 25. SWT:UnsatisfiedLinkError、32ビットJVMでx64 SWTライブラリをロードできません
- 26. 制限付きのアクセス許可でライブラリまたはプロセスをロードできますか?
- 27. C#アプリケーションでVBライブラリからコレクションプロパティをキャストできません。
- 28. 'System.Reflection.IntrospectionExtensions'をアセンブリ 'mscorlibからロードできませんでした
- 29. System.Windows.InputからGestureEventArgsをロードできませんでした。
- 30. コンピュータからperfカウンタをロードできませんでした
OSXでこれが見つかりました:http://stackoverflow.com/questions/11821955/load-dynamic-library-from-memoryこれはWindows用です:http://stackoverflow.com/questions/638277/loading-dll- from-a-location-in-memory – koopajah
私はWindowsとLinux用のソリューションが必要です。 –