2012-02-29 2 views
1

Я работаю над своего рода загрузочным устройством для приложения, которое я пишу. Он буферизует приложение с веб-сайта и запускает его. Он работает очень хорошо до такой степени, что я называю основным методом основного класса приложения, для которого требуются библиотеки, которые также передаются потоком. LIB и приложение находятся в одном загрузчике классов, но он говорит, что не удалось найти библиотеку из-за неудовлетворенной ссылки. Я искал помощь, но не смог найти.Загрузить библиотеку из MemoryClassLoader?

+2

Если вы не указали точное сообщение об ошибке и, возможно, некоторые из кода вашего загрузчика, единственное, что мы можем увидеть неправильно, это то, что double 'm' в' MemmoryClassLoader' ... – thkala

ответ

0

Я предполагаю, что вы получаете UnsatisfiedLinkError, потому что вы еще не сделали Runtime.loadLibrary, чтобы получить собственный код для поддержки native методов. Такие библиотеки должны находиться в локальной файловой системе и не зависят от любого загрузчика классов. Javadoc:

public void loadLibrary(String libname) 

Грузы динамическая библиотека с указанным именем библиотеки. Файл, содержащий собственный код, загружается из локальной файловой системы из места, где обычно хранятся файлы библиотек. Детали этого процесса зависят от реализации. Отображение от имени библиотеки к определенному имени файла выполняется с учетом конкретной системы.

и, очевидно, Runtime.getRuntime() не зависит от какого-либо конкретного загрузчика классов.

Если загрузка сетевого класса может привести к сетевой загрузке нативного кода, это будет огромным remote code execution vulnerability, потому что родной код не может быть ограничен SecurityManager способом java-байт-кода.

Если вы доверяете веб-сайту, который создает приложение, и извлекает его по защищенному каналу (зашифрованному для предотвращения MITM и несанкционированного доступа), вы можете получить библиотеки, выгрузить их в локальную файловую систему, проверить любые подписи или контрольные суммы, затем вызовите Runtime.loadLibrary or System.loadLibrary, чтобы загрузить собственные библиотеки, прежде чем инициировать инициализацию класса.

Если вы не доверяете авторам веб-сайта, создающего приложение, или на веб-сайте размещается контент стороннего производителя, то не загружайте JAR из-за него гораздо меньше системных библиотек.

Даже если авторы сайта заслуживают доверия, загрузка системных библиотек или другого собственного кода, который вы не проверили и не проверили, может быть опасным. Технологическая песочница через chroot и перехват системных вызовов могут немного смягчить этот риск, но будьте осторожны.

+0

Я пытаюсь загрузить библиотеку jar из своего домена , это не обязательно системные библиотеки. – Roby718

+0

@RomanHargrave. Если вы получаете ['UnsatisfiedLinkError'] (http://docs.oracle.com/javase/7/docs/api/java/lang/UnsatisfiedLinkError.html), то это системные библиотеки. Вы получаете это или другой тип «LinkageError»? –

+0

Похоже, проблема в том, что это не biggie. Я только понял, что проблема связана с сообщениями об ошибках, которые LWJGL любит бросать. Я вернусь к тебе! – Roby718

Смежные вопросы