解析Java的Class文件格式——解析魔数和版本号

java class 文件格式解析 前言 大约5年前,想研究javaassistant,cglib等字节码操作的相关类库,来对class进行增强,当要到要操作字节码的时候,发现无法继续下去了,只能放弃。 学习jvm字码,需要理解class的组成方式,对汇编,操作栈比较了解,无奈,只好重新学习编译原理,汇编等知识,再来看jvm规范,现在理解起来,容易很多了。 Class文件规范 编译后被 Java 虚拟机所执行的代码使用了一种平台中立(不依赖于特定硬件及操作系统的) 的二进制格式来表示,并且经常(但并非绝对)以文件的形式存储,因此这种 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 解析Java的Class文件格式——解析魔数和版本号 阅读次数1154 出处 作者:陈跃峰 出自:http://blog.youkuaiyun.com/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); } }
纯java解析安卓apk包名与版本号 此为java项目 运行文件为ApkTest ,修改正确的apk本地地址,可解析apk包名以及版本号 立即下载

相关推荐

保姆级教程:在树莓派5B上用AI Kit跑YOLOv8,实测134fps的完整配置流程

本文提供了一份详细的树莓派5B搭配AI Kit部署YOLOv8的教程,从硬件组装到模型转换、优化和部署,最终实现134FPS的高帧率推理性能。通过Hailo-8L AI加速模块和HEF模型转换,这套方案为边缘AI计算提供了强大支持,适用于智能监控、无人机视觉导航等应用场景。

weixin_28725407的博客 450

Java 中的魔数

魔数用于标识文件的格式,java的Class文件的魔数为CAFEBABE

gao_zhennan的博客 2666

VS2022离线安装总闪退?可能是这个--noWeb参数没加对(完整参数指南)

本文深入解析了VS2022离线安装过程中常见的闪退问题,指出核心原因往往在于命令行参数使用不当,特别是`--noWeb`参数。文章提供了完整的参数使用指南和实战解决方案,包括证书处理、安装器文件修复及自动化脚本,帮助用户彻底解决离线部署中的验证失败与闪退难题。

weixin_28842269的博客 759

java校验文件魔数

给大家整理了一些有关【Java】的项目学习资料(附讲解~~):https://edu.51cto.com/course/35714.html以一些关于【文件类型】的学习资料和大家一起分享一下:https://edu.51cto.com/video/27644.htmlJava 校验文件魔数 在计算机文件中,魔数(Mag...

weixin_35731754的博客 595

TMS320F28377D/F28379D CAN通信避坑指南:从寄存器配置到中断处理的完整流程

本文详细解析了TMS320F28377D/F28379D在CAN通信开发中的关键技术与避坑指南,涵盖时钟配置、寄存器初始化、中断处理等完整流程。针对工业控制和汽车电子应用,提供了实用的优化技巧和错误诊断方法,帮助开发者高效实现稳定可靠的CAN通信。

weixin_30954265的博客 492

Ubuntu HackRF One、GNU Radio、Gqrx相关环境搭建

本文介绍Ubuntu HackRF One、GNU Radio、Gqrx相关环境搭建方法。

无线通信实验室 1万+

笔记-Java基础Class文件之魔数和版本号

魔数与Class文件的版本 魔数:每个Class文件的头四个字节称为魔数,它的唯一作用就是确定这个文件是否为一个能被虚拟机接受的Class文件,很多存储文件都有这个魔数,不以扩展名作为标识的原因是因为扩展名可以随意更改。 魔数值可以被文件格式的制定者自由选择,只要这个魔术值没有被广泛的应用同时又不会引起混淆即可。而Class文件的魔数为CAFEBABE。 版本:紧接着魔数的四个字节存储的是C...

helianus的专栏 311

Windows版MySQL8.4.2LTS解压直用(下载免安装-绿色-项目打包直接使用-含卸载)

安装前运行微软常用运行库全集(也可能称为依赖)关于MySQL8中相关参数配置,可通过。选择8.5.2LTS长期服务版。选中密码,右键会直接复制。

xzzteach的博客 1441

别再只信后缀名了!用Java代码教你识别文件的‘身份证’(文件头魔数校验实战)

本文通过Java代码实战演示如何利用文件头魔数校验技术准确识别文件真实类型,避免仅依赖文件后缀名带来的安全风险。详细解析了PDF、PNG、ZIP等常见文件的魔数特征,并提供了完整的Java实现方案,帮助开发者构建更安全的文件上传校验系统。

weixin_28718755的博客 382

从医疗成像到工业检测:CMOS图像传感器NIR技术的最新应用案例解析

本文深入解析了CMOS图像传感器NIR技术在医疗成像和工业检测中的最新应用案例。通过提升量子效率至70%,NIR技术实现了血管可视化、材料缺陷检测等突破性进展,显著提高了医疗诊断精度和工业质检效率。文章还探讨了系统集成关键考量和前沿发展趋势。

weixin_30879169的博客 90

ROS从入门到精通1-1:ROS核心架构、常用指令与计算图

本文介绍ROS的核心架构,各个文件、目录的用途、常用命令行工具、动态计算图原理。

FRIGIDWINTER的博客 6370

java中的魔数是什么意思?

代码中直接出现的、无注释说明含义的数字常量,是典型的编程反模式,会导致代码可读性差、维护成本高。用常量替代魔数,给常量起有意义的名字:java运行// 常量命名清晰,含义一目了然// 奖金比例// 法定成年年龄// 高薪阈值return 0;类型核心含义处理方式字节码魔数.class 文件开头的 0xCAFEBABE,验证合法性JVM 自动校验,开发者无需干预编程魔数硬编码的无意义数字常量用常量 / 枚举替代,提升可读性让数字有 “名字”,而非让读者猜 “含义”。

qsxxlc的博客 666

Open-AutoGLM 实战:手把手教你用 AI 操作手机「喂饭教程」

Open-AutoGLM 是一个由智谱AI开源的手机操作智能体框架,由手机端智能助手框架Phone Agent和9B大小的模型AutoGLM-Phone-9B组成,借助ADB自动执行点击、滑动、输入等操作——用户只需用自然语言描述任务,系统便能自动规划并完成整个操作流程。

blues_C的博客 1267

Java 的 Class 文件格式——解析魔数和版本号

解析 Java 的 Class 文件格式——解析魔数和版本号 作者:陈跃峰 出自: http://blog.youkuaiyun.com/mailbomb           熟悉 Java 语言有好几年了,技术也学了一些,现在主要从事 J2ME 技术方面的工作,最近工作不是很忙,就找了本电子书——《深入 Java 虚拟机 ( 第二版 ) 》,仔细阅读了一下,读起来比较吃力,现在把 Java class 文件

seeknow的专栏 2150

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

解析Java的Class文件格式——解析魔数和版本号(一)

解析Java的Class文件格式——解析魔数和版本号(一)作者:陈跃峰出自:http://blog.youkuaiyun.com/mailbomb        熟悉Java语言有好几年了,技术也学了一些,现在主要从事J2ME技术方面的工作,最近工作不是很忙,就找了本电子书——《深入Java虚拟机(第二版)》,仔细阅读了一下,读起来比较吃力,现在把Java class文件格式的读书笔记共享给大家。      

爪哇米工作室陈跃峰的移动开发博客 6898

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

0编译器详解_Class 文件格式详解

Class 文件格式详解Write once, run everywhere!,我们都知道这是 Java 著名的宣传口号。不同的操作系统,不同的 CPU 具有不同的指令集,如何做到平台无关性,依靠的就是 Java 虚拟机。计算机永远只能识别 0 和 1组成的二进制文件,虚拟机就是我们编写的代码和计算机之间的桥梁。虚拟机将我们编写的 .java 源程序文件编译为 字节码 格式的 .class 文件,...

weixin_29374181的博客 246

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

为什么.class文件查看不了_Class文件结构

Class文件结构Java技术能够一直保持非常好的向后兼容性,这点Class文件结构的稳定性功不可没。Java目前已经发展到JDK14,但是class文件结构的内容,绝大部分在JDK1.2时代就已经定义好了。虽然JDK1.2的内容比较古老,但是java发展经历了十余个大版本,但是每次基本上只是在原有结构基础上新增内容、扩充功能,并未对定义的内容做修改。Class文件是一组以8位字节为基础...

weixin_39664456的博客 302

【理解HostSpot虚拟机】class文件格式

转载请注明出处:http://blog.youkuaiyun.com/linxdcn/article/details/72896616 1 概述 Java编译后的class文件格式如下定义: ClassFile { u4 magic; u2 minor_version; u2 major_vers

linxd 2137

Class类文件结构表全

Java虚拟机提供的语言无关性 Class 文件格式 根据《Java虚拟机规范》的规定,Class文件格式采用一种类似于C语言结构体的伪结构来存储数 据,这种伪结构中只有两种数据类型:“无符号数”和“表”。后面的解析都要以这两种数据类型为基 础,所以这里笔者必须先解释清楚这两个概念。 无符号数属于基本的数据类型,以u1、u2、u4、u8来分别代表1个字节、2个字节、4个字节和8个 字节的无符号数,无符号数可以用来描述数字、索引引用、数量值或者按照UTF-8编码构成字符串 值。 表是由多个无符号数或者其他

一只青年痴呆 1334

Java类文件结构

Class类文件结构

CodePanda@GPF的博客 1539

JVMJava虚拟机二Class文件

Class 文件结构 定义 Java虚拟机只与特定的二进制文件格式class文件有关联 还有其他语言也能够编译出class文件 class文件包含了Java虚拟机的指令集,符号表以及若干辅助信息 与类的关系 每一个class文件都对应一个类或一个接口,但类和接口并不都定义在文件里 文件格式 每个class文件都由字节流组成,每个字节含有8个二进制位。 多字节数据项总是按照Big-endian(大端在前)的顺序进行存储。 Big-endian(大端在前):数据的低位保存在内存的高地址中,而数据的高位

qq_37237304的博客 116
上一篇: 正则表达式测试工具JRegexpTester 0.36 发布
下一篇: 全面认识JAVA
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值