我一直在为我正在编写的应用程序开发一种引导程序。它缓冲来自网站的应用程序并运行它。它工作得非常好,直到我称之为应用程序主要类的主要方法,这需要库,也是流式传输。 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