javap是jdk工具中自带的反编译工具,它是根据class位元组码档案,反解析出当前类对应的code区(汇编指令)、本地变量表、异常表和程序码行偏移量对映表、常量池等重要资讯。不过有些资讯是得透过在编译(javac)时,指定引数才能输出。
以下为javap
指令使用介绍
javap [option] <classfile>
classfile: 就是你要反编译的class档案
option: 放置参数。可在终端机中直接输数javap
或javap -help
即可看到有哪些参数可以使用
依照参数作用的类型我大致分成三大块,如下:
-vserion
:当前反编译的jdk版本
-public
:仅显示公共类和成员
-protected
:显示受保护的/公共类和成员
-p
-private
:显示所有类和成员
-package
:显示程序包/受保护的/公共类和成员
-sysinfo
:显示正在处理的类的系统讯息(路径、大小、日期、MD5)
-constants
:显示静态最终常量
-s
:列出内部类型签名
-l
:列出行数和本地变量表
-c
:反汇编代码
-v
-vervose
:输出附加讯息
准备一个名为JavapTest.java
的档案,程序码如下:
package Controller;
public class JavapTest{
public String publicString;
protected String protectedString;
String friendlyString;
private String privateString;
public static final String staticString1 = "static final";
static {
String staticString2 = "测试";
}
{
String privateString = "javap test";
}
private void privateConstructor(){
}
int getNum(int x){
return x+x;
}
protected String showProtectedString(){
return protectedString;
}
public void showInfo(){
int x = 10;
System.out.println(privateString+x);
}
}
将其档案进行编译,编译方式请参考Day4-java语言编译器:javac & 运行工具:java (上)
有了class档案後,即可加入不同的参数进行查看。
-version
javap -version
其实-version这参数作用指的是当前javap工具的版本,而非该class编译时的版本,故只要下javap -version
即可查看。
-public
javap -public JavapTest.class
-protected
javap -protected JavapTest.class
-p
-private
javap -p JavapTest.class
或
javap -private JavapTest.class
-package
javap -package JavapTest.class
-sysinfo
javap -sysinfo JavapTest.class
-constants
javap -constants JavapTest.class
-s
javap -s JavapTest.class
-l
javap -l JavapTest.class
-c
javap -c JavapTest.class
-v
-verbose
javap -v JavapTest.class
或
javap -verbose JavapTest.class
最常使用到的参数大概只有-l
、-c
、-v
,不过在使用这些参数时,要特别注意,显示出来的可能只会有protected以上的级别,若要查看全部的类别时,再多加上-p
参数即可。
例:
javap -l JavaTest.class
javap -l -p JavaTest.class
>>: Progressive Web App Badging API 入门实做 (8)
经过「安全」的硬碟部署,最後设置共享资料夹来「驱动」硬碟 确认unRaid Array启动後,转到 ...
图片来源 继续延续前几篇的话题, 好巧不巧本月(2021年10月)刚出刊的专案经理杂志的封面故事,...
我认为整个 Scrum 架构中,对系统以及最终的自组织目标,最重要、最有价值的一场活动,就是检讨会议...
何谓表单? 维基百科是这样说的: 表单是一种带有空格可用於书写以及能选择和勾选相似内容的文件。 表...
分类方案适用於整个组织。RD负责人定义一个是不合适的。此外,由於发布了资产分类准则,这意味着分类方...