一旦加载就可以获得本机库信息

时间:2012-09-20 17:05:43

标签: java native native-code

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

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

2 个答案:

答案 0 :(得分: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的Reflection API来解决它。 示例可以帮助您 -

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

答案 1 :(得分:0)

您可以使用system property

System.getProperty("java.version");

获取Java版本。

您可以使用内部系统属性

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

获取数据模型。对于64位库,32位库“64”的响应为“32”,对于未知数据模型,响应为“未知”。

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