关于Java反编译字节码文件
作者:ThinkStu 发布时间:2021-10-07 01:41:32
如何查看 Java 的字节码文件?
在 Java 中,字节码文件.class
实际上是二进制文件,并不能直接查看。要想查看,我们只能通过反编译对其进行解析,然后查看解析后的源码。
如何反编译字节码文件
要想反编译字节码文件,我们首先要对.java
文件进行编译,得到字节码.class
文件。以Java 类 HelloWorld.java
为例:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
javac HelloWorld.java
然后使用 JDK 自带的字节码反编译工具javap
对.class
文件进行反编译:
javap -c HelloWorld
# 下面为反编译后的内容
Compiled from "HelloWorld.java"
public class HelloWorld {
public HelloWorld();
Code:
0: aload_0
1: invokespecial #1
4: return
public static void main(java.lang.String[]);
Code:
0: getstatic #7
3: ldc #13
5: invokevirtual #15
8: return
}
javap 参数详解
javap是一个用于反汇编Java类文件的命令行工具,可以用来查看Java类的字节码信息。
javap的常用参数如下:
-c:以指令序列的形式输出字节码文件。
-v:以详细信息的形式输出字节码文件。
-s:输出Java源代码中的所有常量池字符串。
-l:输出行号表和局部变量表。
-classpath:指定查找类文件的路径,可以是目录名或者Jar文件名。
-J:传递参数给JVM,例如指定最大堆内存大小等。
附录:反编译字节码后的格式说明
Java类的字节码信息格式是一种二进制格式,它由一系列字节码指令构成。Java类的字节码信息可以通过javap命令来查看,可以以不同的格式输出。
魔数(Magic Number):4个字节,标识文件类型,Java类文件的魔数为0xCAFEBABE。
版本号(Version Number):2个字节,表示类文件的版本信息。
常量池(Constant Pool):由一系列常量表项(Constant Pool Entry)构成,用于存储常量池中的常量。
访问标志(Access Flags):2个字节,用于描述类或接口的访问修饰符,例如public、final、abstract等。
类索引、父类索引和接口索引表:4个字节,分别用于表示该类、父类和实现的接口在常量池中的索引。
字段表和方法表:由一系列字段表项(Field Table Entry)和方法表项(Method Table Entry)构成,用于存储类的字段和方法信息。
属性表:由一系列属性表项(Attribute Table Entry)构成,用于存储类、字段或方法的其他属性信息,例如注解、源文件名等。
来源:https://thinkstu.blog.csdn.net/article/details/129527592
猜你喜欢
- 面试中可能会被问到为什么我们调用start()方法时会执行run()方法,为什么我们不能直接调用run()方法?Java 创建线程的方法实际
- 数组与链表的比较:数组通过下标访问的话是O(1)数组一旦声明 长度就是固定的数组的数据是物理逻辑均连续的链表增删要快一些, 数组遍历快一些长
- HashMap的原理 HashMap的数据结构为数组+链表,以key,value的形式存值,通过调用put与get方法来存值与取值。它内部维
- 现在就为大家介绍一种基于因子分解的RSA算法,这种加密算法有两种实现形式:1、公钥加密,私钥解密;2、私钥加密,公钥解密。下面就为大家分析一
- (一) collection和collections这两者均位于java.util包下,不同的是:collection是一个集合接口,有Li
- Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,
- 前言在产品发布前夕,经常因为编写各类设计文档感到心碎,倒不是难,而是比较繁琐,举例来说,像编写数据库文档这种操作来说,对于新手,甚至很多有一
- 前言ps命令的作用是显示进程信息的。|符号,是个管道符号,表示左右两边两个命令同时执行。grep命令是查找(Global Regular E
- 相信大家肯定都在电商网站买过东西,当我们看中一件喜欢又想买的东西时,这时候你又不想这么快结账,这时候你就可以放入购物车;就像我们平时去超市买
- 页面提交请求参数有两种,一种是form格式提交,一种json格式提交通常情况下我们使用的都是form格式提交的数据,数据格式:k=v&
- Java 实现网络爬虫框架最近在做一个搜索相关的项目,需要爬取网络上的一些链接存储到索引库中,虽然有很多开源的强大的爬虫框架,但本着学习的态
- 自从接触javascript以来,对this参数的理解一直是模棱两可。虽有过深入去理解,但却也总感觉是那种浮于表面,没有完全理清头绪。但对于
- springboot获取项目目录路径springboot部署后获取项目的路径//获取跟目录(绝对路径)File path = new Fil
- 1、什么是servlet异步请求Servlet 3.0 之前,一个普通 Servlet 的主要工作流程大致如下:(1)、Servlet 接收
- 一、获取接口请求的数据可以在Interceptor的afterCompletion中实现但是要重写RequestWrapper代码记录如下:
- 本文实例为大家分享了java查找图中两点之间所有路径的具体代码,基于邻接表,供大家参考,具体内容如下图类:package graph1;im
- 基于JavaFX开发桌面程序注:我也是JAVA FX的初学者之一,自己在学习的时候踩了许多的坑,中文英文的资料查了不少,但是觉得FX技术和其
- static :静态常量,静态方法,静态代码块静态变量: 静态变量属于类的,使用类名来访问,非静态变量是属于对象的,"必须&quo
- 1. pom.xml文件配置<?xml version="1.0" encoding="UTF-8&qu
- 一、JdbcTemplateSpring 框架对 JDBC 进行封装,使用 JdbcTemplate 方便实现对数据库操作二、实战2.1 引