2

ライブラリの例のアーキテクチャ(32ビットまたは64ビット)をJavaからロードすると、ネイティブ・ライブラリに関する情報を取得できますか?

目的: 実行時にライブラリのバージョンとライブラリのアーキテクチャをユーザーに表示します。

4

2 に答える 2

2

すべてのネイティブライブラリ(Windows EXE、DLL、OCX、SYSなど)はPE形式です。PEファイルの重要性は、ディスク上のデータ構造がメモリで使用されるのと同じデータ構造であるということです。

実行可能ファイルをメモリにロードする(たとえば、LoadLibraryを呼び出す)ことは、主にPEファイルの特定の範囲をアドレス空間にマッピングすることです。

PE形式(およびCOFFファイル)が記述されている中心的な場所はWINNT.Hです。このヘッダーファイル内には、メモリ内のPEファイルまたは同等の構造を操作するために必要なほぼすべての構造定義、列挙、および#defineがあります。

オフセット0x0FEにCHARACTERESTICSと呼ばれるPEフィールドがあり、IMAGE_FILE_32BIT_MACHINE、IMAGE_FILE_EXECUTABLE_IMAGEのような多数の特性があります。IMAGE_FILE_32BIT_MACHINE(0x100)は、32ビットDLL/EXE用です。

JavaのReflectionAPIを使用してそれを理解することができます。例はあなたを助けることができます-

http://www.devdaily.com/java/jwarehouse/scala/src/msil/ch/epfl/lamp/compiler/msil/PEType.java.shtml

于 2012-09-20T19:43:48.847 に答える
0

システムプロパティを使用できます

System.getProperty("java.version");

Java のバージョンを取得します。

内部システム プロパティを使用できます

System.getProperty("sun.arch.data.model")

データモデルを取得します。応答は、32 ビット ライブラリの場合は「32」、64 ビット ライブラリの場合は「64」、不明なデータ モデルの場合は「不明」になります。

この内部システム プロパティは、Oracle JVM の値のみを返します。

于 2012-09-20T17:21:41.553 に答える