2

是否有可能获取有关本机库的信息,一旦从 java 加载例如库(32 位或 64 位)的体系结构。

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

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 的 Reflection API 来解决这个问题。示例可以帮助您-

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”,对于未知数据模型,响应为“unknown”。

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

于 2012-09-20T17:21:41.553 回答