解析Class檔案魔數和版本號[轉]
眾所周知,Java語言的可執行檔案是class檔案,俗稱類檔案。這個檔案為了讓不同平臺的虛擬機器都能夠正確的解釋,詳細規定了其檔案格式。下面就按照順序進行介紹:
1、 魔數(magic)
為了方便虛擬機器識別檔案是否是class格式的檔案,SUN公司規定每個class檔案都必須以一個word(4個位元組)來開始,這個數字就稱為魔數。魔數是有4個位元組的無符號數字構成的,而且規定魔數必須是0xCAFEBABE。
2、 版本號(version)
魔數後續的內容就是一個word的長度來表示生成的class檔案的版本號,版本號分為主版本號和次版本號,其中前兩個位元組表示次版本號,後兩個位元組表示主版本號,排列的順序遵從高位在前,低位在後的原則。
下面我寫了一個很簡單的示例程式碼,從一個名字為First.class檔案中讀取到這些資訊,然後輸出出來,不足之處請大家指正!
該程式的程式碼如下:
import java.io.*;
/**
* 解析class檔案格式
*/
public class ParseClassFile{
public static void main(String args[]){
try{
//讀取檔案資料,檔案是當前目錄下的First.class
FileInputStream fis = new FileInputStream("./First.class");
int length = fis.available();
//檔案資料
byte[] data = new byte[length];
//讀取檔案到位元組陣列
fis.read(data);
//關閉檔案
fis.close();
//解析檔案資料
parseFile(data);
}catch(Exception e){
System.out.println(e);
}
}
private static void parseFile(byte[] data){
//輸出魔數
System.out.print("魔數(magic):0x");
System.out.print(Integer.toHexString(data[0]).substring(6).toUpperCase());
System.out.print(Integer.toHexString(data[1]).substring(6).toUpperCase());
System.out.print(Integer.toHexString(data[2]).substring(6).toUpperCase());
System.out.println(Integer.toHexString(data[3]).substring(6).toUpperCase());
//主版本號和次版本號碼
int minor_version = (((int)data[4]) << 8) + data[5];
int major_version = (((int)data[6]) << 8) + data[7];
System.out.println("版本號(version):" + major_version + "." + minor_version);
}
}
[@more@]
|
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/443058/viewspace-908904/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Class檔案解析
- java class檔案解析Java
- java class 檔案格式解析Java
- 【JVM】深入解析class類檔案JVM
- Jvm之用java解析class檔案JVMJava
- 深入解析Class類檔案的結構
- JVM 深入學習:Java 解析 Class 檔案過程解析JVMJava
- Java二進位制Class檔案格式解析Java
- Oracle引數檔案解析——引數解析Oracle
- ISO檔案解析(轉)
- office舊版本檔案轉換為新版本檔案
- 為 Laravel Mix 編譯的 JavaScript 和 CSS 檔案加版本號Laravel編譯JavaScriptCSS
- Oracle引數檔案解析——引數檔案分析獲取Oracle
- class與dex檔案
- linux 快速計算檔案數和目錄數 (轉)Linux
- java class檔案詳解Java
- Class 檔案格式詳解
- Class類檔案結構
- Java Class檔案詳解Java
- 破解class檔案的第一步:深入理解JAVA Class檔案Java
- Linux版本號(轉)Linux
- ini檔案解析c庫(iniparser)【轉】
- Torrent檔案的解析與轉換
- Oracle 引數檔案(轉)Oracle
- ResHacker 用命令列方式修改 windows PE檔案版本號命令列Windows
- 臨時檔案的順序和絕對檔案號
- JAVA Class類檔案結構Java
- 怎樣將class檔案變成.exe檔案?薦
- 判斷Windows版本號 (轉)Windows
- J2SE - Java命令執行class和jar檔案JavaJAR
- (轉)Oracle中的啟動引數檔案:spfile和pfileOracle
- 檔案同步類SimFileSync.class.phpPHP
- 【JVM】JVM系列之Class檔案(三)JVM
- 類檔案結構_class類檔案的的結構
- 專案經理與魔術師(轉)
- Oracle 跟蹤檔案和檔案轉儲(dump)Oracle
- 隱藏nginx版本號資訊(轉)Nginx
- Oracle的檔案號、相對檔案號及其他(續)Oracle