2012-09-20 37 views
2

是否有可能获得有关本机库的信息,一旦从Java库加载了库(32位或64位)的示例架构。
是否有可能获得本机库信息一旦得到加载

目的:在运行时向用户显示库的版本和库的架构。

+1

可以实现对库中的本地方法来获得您所需要的信息。 –

+0

我想JNA应该能够做到这一点。 –

回答

2

所有本机库(Windows EXE,DLL,OCX,SYS等)均采用PE格式。 PE文件的意义在于,磁盘上的数据结构与内存中使用的数据结构相同。

将可执行文件加载到内存中(例如,通过调用LoadLibrary)主要是将PE文件的某些范围映射到地址空间。

描述PE格式(以及COFF文件)的中心位置是WINNT.H。在这个头文件中,你会发现几乎所有的结构定义,枚举和#define都需要使用PE文件或者内存中的等价结构。

在偏移量0x0FE处有一个名为CHARACTERESTICS的PE字段,有许多字符如IMAGE_FILE_32BIT_MACHINE,IMAGE_FILE_EXECUTABLE_IMAGE。 IMAGE_FILE_32BIT_MACHINE(0x100)用于32位DLL/EXE。

您可以使用Java的Reflection API来找出它。 实例可以帮助您 -

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

+0

这是有希望的...现在需要获得其他操作系统的结构'',因为java必须是平台独立的 – twid

0

可以使用system property

System.getProperty("java.version"); 

获取Java版本。

可以使用内部系统属性

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

得到的数据模型。对于64位库,响应将是“32”,对于32位库“64”,对于未知数据模型,响应将是“未知”。

此内部系统属性仅返回Oracle JVM的值。

+0

这不是我正在寻找...准确地说,我需要的是从图书馆本身得到这个... – twid

相关问题