我一直在爲我正在編寫的應用程序開發一種引導程序。它緩衝來自網站的應用程序並運行它。它工作得非常好,直到我稱之爲應用程序主要類的主要方法,這需要庫,也是流式傳輸。 LIB和應用程序位於同一個類加載器中,但它表示由於鏈接不滿而無法找到該庫。我尋求幫助,但找不到任何。從MemoryClassLoader加載庫?
回答
我假設你得到一個UnsatisfiedLinkError
,因爲你還沒有做Runtime.loadLibrary
來引入本機代碼來支持native
方法。這樣的庫需要在本地文件系統上,並且獨立於任何類加載器。的Javadoc:
public void loadLibrary(String libname)
加載指定庫名的動態庫。包含本地代碼的文件從本地文件系統從傳統獲取庫文件的位置加載。 這個過程的細節是依賴於實現的。從庫名到特定文件名的映射是以系統特定的方式完成的。
顯然,Runtime.getRuntime()
是獨立於任何特定的類加載器。
如果網絡類負載可能會導致網絡負載的本地代碼,這將是一個巨大的remote code execution vulnerability,因爲本機代碼不能受到java字節碼可以的方式約束SecurityManager
。
如果您信任產生應用程序的網站,並通過安全通道(加密以防止MITM和篡改)獲取它,那麼您可以獲取這些庫,將它們轉儲到本地文件系統,驗證任何簽名或校驗和,然後在導致類初始化之前調用Runtime.loadLibrary
or System.loadLibrary
加載本地庫。
如果您不信任生成該應用程序的網站的作者,或該網站託管第三方內容,那麼請勿將JAR從系統庫中加載更少的系統庫。
即使網站作者是值得信賴的,加載系統庫或其他未經審查和測試的本地代碼也是危險的。通過chroot
進行沙盒處理和系統調用攔截有助於緩解這種風險,但要小心。
我想從我的域加載庫jar ,這些不一定是系統庫。 – Roby718 2012-02-29 17:41:17
@RomanHargrave,如果您收到['UnsatisfiedLinkError'](http://docs.oracle.com/javase/7/docs/api/java/lang/UnsatisfiedLinkError.html),那麼它們就是系統庫。你是否得到這種或不同類型的'LinkageError'? – 2012-02-29 17:46:35
看起來問題並不大。我剛剛意識到這個問題與LWJGL喜歡拋出的錯誤消息有關。我會盡快回復你! – Roby718 2012-02-29 17:53:33
- 1. 從庫加載庫
- 2. 從jar加載庫
- 3. 從elisp加載動態庫
- 4. dustjs從數據庫加載
- 5. 從加載密鑰庫
- 6. 在Silverlight加載之前從數據庫預加載翻譯
- 7. 如何從瀏覽器加載JAR文件加載庫?
- 8. AJAX庫加載
- 9. JNI加載庫
- 10. RE2庫加載
- 11. 從文本文件加載數據庫
- 12. Spring MVC - 從數據庫加載數據
- 13. 從數據庫中加載IDP Spring SAML
- 14. knockout.js從JavaScript庫加載小部件
- 15. 從db4o數據庫加載對象
- 16. 從數據庫緩慢加載圖像
- 17. 不能從數據庫加載圖像
- 18. Django從數據庫加載LANGUAGES參數
- 19. 無法加載圖像從數據庫
- 20. 加載在網站的XML從庫DLL
- 21. 從flash庫中加載位圖
- 22. 如何從flash庫加載圖像?
- 23. Prolog-從文件中加載庫
- 24. Hibernate從存儲庫加載UserType對象
- 25. 從相對路徑加載java庫
- 26. 從照片庫中加載圖像
- 27. 從數據庫動態加載元素
- 28. CKEDITOR從數據庫加載數據AJAX
- 29. 如何從庫中加載活動?
- 30. 從一個函數內加載js庫?
除非你提供確切的錯誤信息,也許你的一些加載器代碼,我們唯一能看到的錯誤是'MemmoryClassLoader'中的雙'm' ... – thkala 2012-02-29 17:17:38