解析Java的Class文件格式——解析魔数和版本号(一)
作者:陈跃峰
出自:http://blog.csdn.net/mailbomb
熟悉Java语言有好几年了,技术也学了一些,现在主要从事J2ME技术方面的工作,最近工作不是很忙,就找了本电子书——《深入Java虚拟机(第二版)》,仔细阅读了一下,读起来比较吃力,现在把Java 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);
}
}
分享到:
相关推荐
python实现的简单的class解析以及简单执行class,使用python2解析java class文件,并简单执行 class,让大家更加了解class
java语言实现的class文件解析,让你明白class文件中到底都有些什么东西。
Java 代码解析 class 文件
class文件解析器class文件解析器class文件解析器
1、打开一个或者多个*.class文件,XJad反编译后,重命名为*.java文件, 保存至当前文件夹,并在编辑器中打开查看; 2、打开一个文件夹,XJad将该文件夹下所有*.class文件进行反编译,并保存至该文件夹下, 依据包...
轻松方便的把class文件转化为java文件
一个简单的分析工具,用于分析”.class/.cap/.exp”格式的Java文件。 对于CAP文件,支持version 2.1 and 2.2. 适用于JCVM的学习。 使用工具时,需保证“C:\Program Files\WinZip\WINZIP32.EXE”存在,用于解压CAP...
java class文件反编译器,可以看轻松查看源代码!下吧
NULL 博文链接:https://zheng12tian.iteye.com/blog/1488813
Javaclass文件格式之访问标志信息——动力节点共6页.pdf.zip
java class文件编译,可查看编译文件。
NULL 博文链接:https://bernoulli.iteye.com/blog/1768713
java反编译工具(.class文件反编译成.java文件) 解压后点击exe文件打开工具,点击open菜单选择.class文件执行后即生成.java文件 一直在使用的,方便,系统维护必不可少
JD-GUI 0.3.3 绿色版_Java反编译工具 java 反编译,jar包class文件反编译器.
将.class文件反编译为.java文件,可以实现将别人的文件反编译后查看里面的代码。
Java class 文件反编译工具Java class 文件反编译工具
用于查看class文件 可用于java文件的反编 是一款比较好用的class文件查看工具
ClassFinal是一款java class文件安全加密工具,支持直接加密jar包或war包,无需修改任何项目代码,兼容spring-framework;可避免源码泄漏或字节码被反编译
java文件编译成.class文件后的查看工具,很实用的.class查看工具。