6

私は Java の初心者で、Java Native Interface を使用して C で記述したコードを実行するように言われました。

さて、これはばかげた質問かもしれませんが、JNI のポイントは何でしょうか? Java UI プログラムからプロセスを実行し、その stdout を解析することはできませんか?

また、JNI を使用するとセキュリティ上の問題が発生する可能性があることも読みました。これらの問題は、呼び出されたコードの品質に直接依存していますか? それとももっと深いものですか?

ありがとう。

4

3 に答える 3

6

JNIのポイントは何ですか?

これにより、同じプロセス内でCコードとJavaコードを混在させることができます。

Java UIプログラムからプロセスを実行し、そのstdoutを解析することはできませんか?

JNIを使​​用して実現できる多くのことは、プロセス間通信(IPC)を使用して実現することもできます。ただし、すべての入力データを他のプロセスに送信してから、すべての結果を返送する必要があります。これはかなり高価になる可能性があるため、JNIを使​​用できる多くの状況(既存のCライブラリのラップなど)ではIPCは実用的ではありません。

また、JNIを使​​用するとセキュリティの問題が発生する可能性があることも読みました。これらの問題は、呼び出されたコードの品質に直接依存しますか?それともこれはもっと深いものですか?

ここでのポイントは、JVMは、Javaコードがスローされた場合でも、バッファオーバーラン、スタックスマッシング攻撃などが発生しないようにするために多くの作業を行うということです。たとえば、すべての配列アクセスに対して境界チェックを実行します(Cは実行しません)。

一方、JNIコードはJVMのブラックボックスです。Cコードに問題がある場合(バッファオーバーランなど)、すべての賭けは無効になります。

于 2012-05-31T08:25:31.987 に答える
2

Java UI プログラムからプロセスを実行し、その stdout を解析することはできませんか?

ネイティブ コードを実行するたびに、常に新しいプロセスを開始するのが適切だと思いますか? プロセス間で潜在的に大量のデータを転送したいですか? (ネイティブの画像変換を想像してください。)

また、JNI を使用するとセキュリティ上の問題が発生する可能性があることも読みました。これらの問題は、呼び出されたコードの品質に直接依存していますか?

はい。基本的に、ネイティブ コードは、JVM で実行されている Java よりもセキュリティ サンドボックスが少なくなります。コードにセキュリティ バグ (バッファ オーバーフローなど) がある場合、明らかにアプリ全体のセキュリティに影響します。

Java 開発者が JNI について心配する必要があることは比較的まれであると言わざるを得ません。確かに、私は自分のキャリアの中で JNI に触れたことは数回しかありません。必要に応じてSWIGも参照してください。

于 2012-05-31T08:25:47.963 に答える
1

Java UI プログラムからプロセスを実行し、その stdout を解析することはできませんか?

それはあなたが呼んでいるものに依存します。

JNI を介してプログラムを呼び出すだけではなく、ライブラリ コードを呼び出すことに注意してください。

それに加えて、新しいプロセスの生成には比較的コストがかかり、複数のプロセスの管理は複雑です。

于 2012-05-31T08:25:55.847 に答える