我一直在爲我正在編寫的應用程序開發一種引導程序。它緩衝來自網站的應用程序並運行它。它工作得非常好,直到我稱之爲應用程序主要類的主要方法,這需要庫,也是流式傳輸。 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. 從數據庫加載樹
- 4. 從加載密鑰庫
- 5. 從elisp加載動態庫
- 6. 從庫加載視圖Android
- 7. dustjs從數據庫加載
- 8. 從插件加載庫 - cakephp
- 9. 如何從瀏覽器加載JAR文件加載庫?
- 10. 在Silverlight加載之前從數據庫預加載翻譯
- 11. RE2庫加載
- 12. AJAX庫加載
- 13. JNI加載庫
- 14. 加載Dojo庫
- 15. 加載庫
- 16. jna加載庫
- 17. 加載DLL庫
- 18. 從一個函數內加載js庫?
- 19. 從數據庫加載zend config參數
- 20. JAVAFX:從數據庫加載圖像
- 21. 如何從flash庫加載圖像?
- 22. 從照片庫中加載圖像
- 23. 從數據庫加載到WordPress頁面
- 24. 從單個鏈接加載SwipeBox庫
- 25. 從zip,內存等加載動態庫
- 26. 鋰:從庫中加載視圖
- 27. 無法加載圖像從數據庫
- 28. Jenkins Job DSL - 從git repo加載groovy庫
- 29. Django從數據庫加載LANGUAGES參數
- 30. 從文本文件加載數據庫
除非你提供確切的錯誤信息,也許你的一些加載器代碼,我們唯一能看到的錯誤是'MemmoryClassLoader'中的雙'm' ... – thkala 2012-02-29 17:17:38