javap

javap可以用来反编译class文件

命令参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
-help  --help  -?                输出此用法消息
-version 版本信息
-v -verbose 输出附加信息
-l 输出行号和本地变量表
-public 仅显示公共类和成员
-protected 显示受保护的/公共类和成员
-package 显示程序包/受保护的/公共类
和成员 (默认)
-p -private 显示所有类和成员
-c 对代码进行反汇编
-s 输出内部类型签名
-sysinfo 显示正在处理的类的
系统信息 (路径, 大小, 日期, MD5 散列)
-constants 显示最终常量
--module <模块>, -m <模块> 指定包含要反汇编的类的模块
--module-path <路径> 指定查找应用程序模块的位置
--system <jdk> 指定查找系统模块的位置
--class-path <路径> 指定查找用户类文件的位置
-classpath <路径> 指定查找用户类文件的位置
-cp <路径> 指定查找用户类文件的位置
-bootclasspath <路径> 覆盖引导类文件的位置

verbose结果组成

1.基本信息

  • class文件版本号(对应的是jre版本,高版本编译的文件不能用低版本的javap反编译)
  • 类的访问权限
  • 类及父类名
  • 接口、字段、属性、方法及对应数量

2.常量池

存放各种常量以及符号引用

3.字段区域

列举该类中的各个字段,里边包含字段类型和访问权限

4.方法区域

包含方法描述符和访问权限,以及代码区域,代码区域开始位置声明了操作数栈及局部变量的最大值,方法接收参数的数量。这里的局部变量指的是字节码文件中变量的数量。

  • 字节码
  • 异常表
  • 行数映射表

文章链接 https://fangzongzhou.github.io/2018/10/08/计算机/技术栈/Java/javap/