2012-02-29 6 views
1

私は書いているアプリケーションのための一種のブートストラップに取り組んできました。これは、Webサイトからアプリケーションをバッファして実行します。私はアプリケーションのメインクラスのメインメソッドと呼ばれる点までは非常にうまく動作します。ライブラリのストリーミングも必要です。 LIBとアプリケーションは同じクラスローダーにありますが、不十分なリンクのためにライブラリを見つけることができなかったと言われています。私は助けを求めたが、何も見つけることができなかった。MemoryClassLoaderからライブラリをロードしますか?

+2

あなたが正確なエラーメッセージとローダーコードのいくつかを提供しない限り、間違っているのは 'MemmoryClassLoader'のダブル' m'です... – thkala

答えて

0

Runtime.loadLibraryであるため、nativeメソッドをサポートするネイティブコードを取得していないと思われます。このようなライブラリは、ローカルのファイルシステム上にある必要があり、クラスローダから独立しています。 Javadoc:

public void loadLibrary(String libname) 

は、指定されたライブラリ名を持つダイナミックライブラリをロードします。ネイティブコードを含むファイルは、ローカルファイルシステムからライブラリファイルが通常取得される場所からロードされたです。 このプロセスの詳細は、実装に依存しますです。ライブラリ名から特定のファイル名へのマッピングは、システム固有の方法で行われます。

そして明らかに、Runtime.getRuntime()は、特定のクラスローダから独立しています。

ネイティブコードがネイティブコードのネットワーク負荷を引き起こす可能性がある場合、ネイティブコードはSecurityManagerの方法で制限できないため、巨大なremote code execution vulnerabilityになります。

アプリケーションを生成するWebサイトを信頼し、安全なチャネル(MITMと改ざんを防ぐために暗号化されています)で取得している場合、ライブラリをフェッチしてローカルファイルシステムにダンプし、クラスを初期化する前に、ネイティブライブラリをロードするためにRuntime.loadLibrary or System.loadLibraryを呼び出してください。

アプリケーションを作成するWebサイトの作成者を信頼しない場合、またはそのWebサイトがサードパーティのコンテンツをホストする場合は、システムライブラリをはるかに少なくしてJARをロードしないでください。

ウェブサイトの著者が信頼できるものであっても、審査もテストもしていないシステムライブラリやその他のネイティブコードを読み込むことは危険です。 chrootによるプロセスサンドボックス処理とシステムコールの代行受信は、このリスクをいくらか緩和するのに役立ちますが、注意が必要です。

+0

私のドメインからライブラリjarをロードしようとしていますこれらは必ずしもシステムライブラリではありません。 – Roby718

+0

@RomanHargrave、['UnsatisfiedLinkError'](http://docs.oracle.com/javase/7/docs/api/java/lang/UnsatisfiedLinkError.html)を取得している場合は、システムライブラリです。あなたはそれを取得していますか、それとも 'LinkageError'の別の種類ですか? –

+0

問題は大したものではないようです。私はちょうどその問題が、LWJGLがスローするのが好きなエラーメッセージと関係していることに気づいた。私はあなたにそれに戻ってきます! – Roby718

関連する問題