java - 加载后是否可以获取 native 库信息

标签 java native native-code

一旦从java加载了例如库的架构(32位或64位),是否可以获取有关 native 库的信息。

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

最佳答案

所有 native 库(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

关于java - 加载后是否可以获取 native 库信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12517434/

相关文章:

java - setter 在 Spring Framework #2 中如何工作?

java - 简单的记录器类但抛出空指针异常?

c# - 在 C# 中编码到 native 库

windows-mobile - 适用于 Windows CE/Mobile 的代码分析/性能分析工具

android - 如何从 flutter 插件 native 代码返回小部件?

c# - 托管应用程序中的非托管内存泄漏

c# - 无论如何,是否有 DllImport 函数从作为字节数组加载到 RAM 中的 native dll?

java - 创建多个文件

c# - 对固定 block 内的指针所做的更改是否保留?

java - 使用ajax和spring mvc上传多个文件