2012-09-20 36 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

相關問題