javap,javappt下载

发布时间:2023-01-09

本文目录一览:

  1. JVM_字节码文件(ClassFile)详解
  2. 怎样使用javap来反编译class文件
  3. jdk是什么
  4. javap可以反编译pak文件吗

JVM_字节码文件(ClassFile)详解

我们知道 javac 命令可以将 .java 文件编译成 .class 文件,而这个 Class 文件 中包含了 Java虚拟机 指令集、符号表以及若干其他辅助信息;最终将在 Java虚拟机 运行。 本文是以 JVM8 为例的。 每一个 Class文件 都有如下的 ClassFile 文件结构: 先简单介绍一下 ClassFile 文件结构各部分含义: 描述符是表示字段或方法类型的字符串。 字段描述符表示类、实例或局部变量的类型。 从上面文法可以看出,字段描述符中一共有三个类型: 方法描述符包含 0 个或者多个参数描述符以及一个返回值描述符。 看了描述符,可能大家有点疑惑,泛型信息怎么表示啊? 常量池的通用格式如下: 目前 JVM8 中一共用 14 种常量类型,分别如下: 我们知道要使用一个字段或者调用一个方法,就必须知道字段或者方法所属类符号引用,和字段的名字和类型,方法的名字和方法参数类型以及方法返回值类型。 但是我们知道类是能继承的,那么子类调用父类的方法或者字段,这里的所属类符号引用,到底是子类本身还是父类的呢? 我们知道类,方法,字段都有不同的访问标志,在 Class 文件 中使用一个 u2 类型数据项来存储,也就是最多可以有 16 个不同标志位。 在类,方法,字段中有相同的标志,也有不同的标志,总体规划,我们可以借助 Modifier 类的源码来了解: 在 Modifier 类中,类的访问标志: 我们知道在 java 中类可以用的修饰符有: public , protected , private , abstract , static , final , strictfp 。 但是我们再看 Class 文件 中类的访问标志: 仔细看,你会发现有些不同点: 在 Modifier 类中,字段的访问标志: 我们知道在 java 中字段可以用的修饰符有: public , protected , private , static , final , transient 和 volatile 。 但是我们再看 Class 文件 中字段的访问标志: Class 文件 中字段的访问标志和 java 中字段的修饰符差不多,只是多了 ACC_SYNTHETIC 和 ACC_ENUM 两个标志。 在 Modifier 类中,方法的访问标志: 我们知道在 java 中方法可以用的修饰符有: public , protected , private , abstract , static , final , synchronized , synchronized 和 strictfp 。 但是我们再看 Class 文件 中方法的访问标志: 字段详情 field_info 的格式如下: 方法详情 method_info 的格式如下: 关于 Class 文件 中属性相关信息,我们再后面章节介绍。 我们可以通过 javap 的命令来阅读 Class 文件 中相关信息。 这个是最简单的一个类,没有任何字段和方法,只继承 Object 类,我们来看看它编译后的字节码信息,通过 javap -p -v T.class 的命令: 我们重点关注常量池相关信息,会发现虽然 T.class 很干净,但是也有 15 个常量,来我们依次分析: 与之前的例子相比较,多了一个字段和方法,那么得到的字节码信息如下: 但是你会发现常量池中怎么没有这个字段 name 的 CONSTANT_Fieldref_info 类型的常量呢? 那是因为我们没有使用这个字段。 多写了一个方法 test1 来调用 name 字段和 test 方法,那么得到的字节码信息如下: 这里定义一个父类 TParent ,有一个公共字段 name 和方法 say 。子类

怎样使用javap来反编译class文件

当然可以了。在java软件包的bin文件夹下有一个javap程序,就是用来反编译的。 用法如java一样。就是先用javac变成字节码文件就是.class文件后,用javap 加上文件名就可以反编译了。 举个例子test.class,反编译用javap test就行了。

jdk是什么

JDK(Java Development Kit)是Sun微系统针对Java开发人员发布的免费软件开发工具包(SDK,Software development kit)。自从Java推出以来,JDK已经成为使用最广泛的Java SDK。 JDK包含了一批用于Java开发的组件,其中包括:

  • javac:编译器,将后缀名为.java的源代码编译成后缀名为“.class”的字节码
  • java:运行工具,运行.class的字节码
  • jar:打包工具,将相关的类文件打包成一个文件
  • javadoc:文档生成器,从源码注释中提取文档,注释需符合规范
  • jdb debugger:调试工具
  • jps:显示当前java程序运行的进程状态
  • javap:反编译程序

javap可以反编译pak文件吗

概述: javap是 Java class文件分解器,可以反编译,也可以查看java编译器生成的字节码,从而对代码内部的执行逻辑进行分析。 语法: 把java文件编译为class文件:javac Test.java (Test.java为java文件名) 生成对应的 .class 文件 Test.class 执行javap操作:javap 命令行 class文件名称(不加 .class 后缀) 例如: javap -c Test 命令行

  • -help 输出 javap 的帮助信息。
  • -l 输出行及局部变量表。
  • -b 确保与 JDK 1.1 javap 的向后兼容性。
  • -public 只显示 public 类及成员。
  • -protected 只显示 protected 和 public 类及成员。
  • -package 只显示包、protected 和 public 类及成员。这是缺省设置。
  • -private 显示所有类和成员。
  • -J[flag] 直接将 flag 传给运行时系统。
  • -s 输出内部类型签名。
  • -c 输出类中各方法的未解析的代码,即构成 Java 字节码的指令。
  • -verbose 输出堆栈大小、各方法的 locals 及 args 数,以及class文件的编译版本
  • -classpath[路径] 指定 javap 用来查找类的路径。如果设置了该选项,则它将覆盖缺省值或 CLASSPATH 环境变量。目录用冒号分隔。
  • -bootclasspath[路径] 指定加载自举类所用的路径。缺省情况下,自举类是实现核心 Java 平台的类,位于 jre/lib/rt.jar 和 jre/lib/i18n.jar 中。
  • -extdirs[dirs] 覆盖搜索安装方式扩展的位置