详解JDK自带javap命令反编译class文件和Jad反编译class文件(推荐使用jad)

详解JDK自带javap命令反编译class文件和Jad反编译class文件

什么是javap命令和Jad反编译?

  • javap命令是JDK自带的反编译工具,用于反编译class文件。
  • Jad是一款免费的Java反编译器,可以将class文件反编译为Java源代码。

使用javap命令反编译class文件

  1. 打开命令行工具,进入.class文件所在的目录。
  2. 键入javap -c -p classfile,其中classfile为需要反编译的.class文件名。
  3. -c表示反编译代码时显示代码中的所有指令。
  4. -p表示反编译代码时显示代码中的所有类和成员变量名以及修饰符。
  5. 查看输出结果,即为反编译后的代码。

示例:

$ javap -c -p MyClass.class
Compiled from "MyClass.java"
public class MyClass {
  public static void main(java.lang.String[]);
    Code:
       0: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
       3: ldc           #3                  // String Hello World!
       5: invokevirtual #4                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
       8: return
}

使用Jad反编译class文件

  1. 下载Jad,并放在合适的位置(比如C:\jad下)。
  2. 将.class文件复制到Jad所在的目录下(比如C:\jad)。
  3. 打开命令行工具,进入Jad所在目录。
  4. 键入jad -sjava classfile,其中classfile为需要反编译的.class文件名。
  5. -sjava表示将反编译结果输出到一个.java文件中。
  6. 查看输出结果,即为反编译后的代码。

示例:

$ jad -sjava MyClass.class
Parsing MyClass.class...Generating MyClass.java

反编译后的文件MyClass.java内容:

public class MyClass
{
    public static void main(String args[])
    {
        System.out.println("Hello World!");
    }
}

总结

Javap和Jad都是Java反编译的利器,使用简单方便,并且效果好。其中,Jad还支持反编译多个class文件,并可以将整个目录下的.class文件全部反编译。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解JDK自带javap命令反编译class文件和Jad反编译class文件(推荐使用jad) - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • JAVA module-info.java文件详解

    JAVA Module 是 JDK 9 之后推出的新特性,可以用来管理和组织 Java 应用程序的代码。在使用 Java module 的时候,需要用到 module-info.java 文件来声明模块的依赖和公共 API 等信息。本文将详细讲解 JAVA module-info.java 文件的相关知识,帮助读者了解如何使用该功能。 1. module-i…

    Java 2023年5月19日
    00
  • 如何使用MyBatis框架实现增删改查(CRUD)操作

    使用MyBatis框架实现增删改查(CRUD)操作是非常简单的,在下面的攻略中,我将展示如何使用MyBatis框架来完成这些操作。 准备工作 在开始使用MyBatis框架之前,你需要完成以下准备工作: 确定数据库连接信息,包括数据库名称、用户名和密码等。 安装MyBatis框架和相关依赖。 创建数据库表 首先我们需要创建一张用于存储数据的表,例如创建一个名为…

    Java 2023年5月20日
    00
  • JAVA IO API使用详解

    Java IO API使用详解 概述 Java IO API是用于读写数据的标准API。Java IO库是一个基于流的库,主要利用了Java中的抽象类和接口来完成对文件的读写操作。 在Java IO库中,主要包括以下三种抽象源: 字节流 字符流 以及文件读写流 字节流 字节流是Java IO库中最基本的流,它支持对字节的输入和输出两种操作。 InputStr…

    Java 2023年5月20日
    00
  • 加快JDBC设计中JSP访问数据库

    下面是关于加快JDBC设计中JSP访问数据库的完整攻略。 一、背景概述 当我们使用JDBC API来开发Java应用程序时,一些重复的代码会让我们感到烦恼。这些代码包括: 注册驱动 创建连接 创建语句 执行查询或更新 处理结果 这些操作必须在每个Java类中重复实现,这显然是繁琐的。JSP技术为我们提供了一种简单的方式来访问数据库,减少代码冗余和开发时间。 …

    Java 2023年6月16日
    00
  • 微信开发准备第二步 springmvc mybatis项目结构搭建

    微信开发准备第二步 springmvc mybatis项目结构搭建是微信公众号开发的重要步骤之一。下面是该步骤的完整攻略: 步骤一:创建Maven项目 我们可以使用Maven来创建一个新的SpringMVC MyBatis项目。在创建项目时,我们需要选择“webapp”类型的项目,并添加SpringMVC和MyBatis的依赖。下面是一个示例的pom.xml…

    Java 2023年5月17日
    00
  • maven项目打包上传到私有仓库

    下面是“Maven项目打包上传到私有仓库”的完整攻略: 1. 创建maven项目 首先我们需要创建一个maven项目,这里就不多赘述了,可以通过以下命令在终端中创建一个maven项目: mvn archetype:generate -DgroupId=com.example -DartifactId=my-webapp -DarchetypeArtifact…

    Java 2023年5月19日
    00
  • 简单了解SpringMVC常用组件作用解析

    以下是关于“简单了解SpringMVC常用组件作用解析”的完整攻略,其中包含两个示例。 简单了解SpringMVC常用组件作用解析 SpringMVC是一个基于MVC构架的Web框架,它提供了一种灵活、高效的方式来开发Web应用程序。在SpringMVC中,有一些常用的组件,下面我们来简单了解一下这些组件的作用。 DispatcherServlet Disp…

    Java 2023年5月16日
    00
  • Netty分布式抽象编码器MessageToByteEncoder逻辑分析

    Netty是一个高性能、可扩展、可定制、易用的NIO框架,不仅支持传统的TCP和UDP协议,还支持HTTP、WebSocket等协议。Netty的分布式抽象编码器MessageToByteEncoder是其中非常重要的一个组件,下面将对其进行详细讲解。 1. MessageToByteEncoder的概述 MessageToByteEncoder是Netty…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部