详解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 实现栈的三种方式

    下面是详细讲解“Java 实现栈的三种方式”的完整攻略。 1. 栈的概述 栈(Stack)是一种常见的操作系统模型,具有“先进后出”(Last In First Out)的特点。栈被广泛应用于函数调用、表达式求值、程序递归等领域,是算法和数据结构中必不可少的基本数据结构之一。 栈的基本操作包含了入栈(push)、出栈(pop)、获取栈顶元素(peek)等。实…

    Java 2023年5月18日
    00
  • html 中文乱码 HTML超链接中文乱码问题分析及解决方法

    下面详细讲解一下“HTML中文乱码HTML超链接中文乱码问题分析及解决方法”的完整攻略: 问题分析 在网页制作的过程中,有时候会遇到中文字符乱码的问题,尤其是在使用HTML超链接时更容易出现这种情况。HTML中文乱码问题往往由以下原因引起: 文本编辑器编码问题; 文件编码不正确; 在HTML文件中未设置正确的编码方式; 在服务器上读取HTML文件时编码方式不…

    Java 2023年5月20日
    00
  • InputStreamReader 和FileReader的区别及InputStream和Reader的区别

    关于InputStreamReader和FileReader的区别,以及InputStream和Reader的区别,我们需要从数据输入、数据输出两个方面来讲解。 InputStreamReader 和 FileReader 的区别 InputStreamReader和FileReader都是读取字符流的类,主要区别在于它们输入的数据源不同。 InputStr…

    Java 2023年5月20日
    00
  • 一篇文章解决Java异常处理

    一篇文章解决Java异常处理的完整攻略 Java是一种面向对象的编程语言,设计初衷之一就是为了减轻程序员的负担,让程序员能够更好地管理代码和实现业务逻辑。然而,即便Java已经尽力省略了一些开发工作量,但仍有许多棘手的问题需要程序员自己去解决。其中一个常见的问题就是异常处理。 什么是Java异常? 异常是Java语言的对象,它表示在程序运行期间发生的不正常情…

    Java 2023年5月26日
    00
  • SpringBoot自定义加载yml实现方式,附源码解读

    首先我们需要了解在SpringBoot中如何读取配置文件。SpringBoot 支持的主配置文件类型有两种: .properties 和 .yml 文件格式。在默认情况下,SpringBoot 会优先读取 .properties 文件,如果同时存在两种格式,.yml 文件会覆盖.properties 文件。 然而,有些时候我们需要动态加载一些配置文件,而这些…

    Java 2023年6月15日
    00
  • Java字节码插装的作用是什么?

    Java字节码插装是指在程序运行期间通过修改Java程序的字节码来达到修改程序行为和进行调试的目的。常见的字节码插装技术有Java Agent和AspectJ。 Java字节码插装的作用主要分为以下两个方面: 类加载时期修改类的字节码,在程序运行时对其进行增强 在程序运行时,通过对方法的字节码进行修改,实现将自己的代码嵌入到目标方法的中间或结尾位置 常见的应…

    Java 2023年5月11日
    00
  • Spring声明式事务配置使用详解

    Spring声明式事务配置使用详解 什么是事务 事务是一组完整的业务操作,这些操作作为一个原子单元,要么全部成功,要么全部失败回滚,保证数据库中的数据一致性。 声明式事务的优点 Spring框架提供的声明式事务管理有以下几个好处: 代码简洁:通过使用声明式事务管理,Spring框架可以将所有的数据库事务处理的代码都放在配置文件中,这样就不需要在业务逻辑代码中…

    Java 2023年5月20日
    00
  • Spring源码:Bean生命周期(三)

    前言 在之前的文章中,我们已经对 bean 的准备工作进行了讲解,包括 bean 定义和 FactoryBean 判断等。在这个基础上,我们可以更加深入地理解 getBean 方法的实现逻辑,并在后续的学习中更好地掌握createBean 方法的实现细节。 getBean用法 讲解getBean方法之前,我们先来看看他有几种常见的用法: // 创建一个Spr…

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