java字节码反编译_javap 反编译 java 字节码文件

概述:

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 平台的类,位于 jrelibt.jar 和 jrelibi18n.jar 中。

-extdirs[dirs] 覆盖搜索安装方式扩展的位置。扩展的缺省位置是 jrelibext。

示例:

一个Demo.java文件(存放在桌面)

class Demo

{

public static void main(String[] args)

{

Integer aInteger = 56;

int aInt=0;

int aInt2 = 123;

String s="helloworld";

String aString = new String("IamString");

}

}

反汇编结果

Compiled from "Demo.java"

class Demo {

Demo();

Code:

0: aload_0

1: invokespecial #1 // Method java/lang/Object."":()V

4: return

public static void main(java.lang.String[]);

Code:

0: bipush 56

2: invokestatic #2 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;

5: astore_1

6: iconst_0

7: istore_2

8: bipush 123

10: istore_3

11: ldc #3 // String helloworld

13: astore 4

15: new #4 // class java/lang/String

18: dup

19: ldc #5 // String IamString

21: invokespecial #6 // Method java/lang/String."":(Ljava/lang/String;)V

24: astore 5

26: return

}

对其中的语法不清楚啊?可以参照一下这两篇博客:

javap -c 命令详解 http://blog.csdn.net/junsure2012/article/details/7099222

JVM字节码之整型入栈指令(iconst、bipush、sipush、ldc) http://www.cnblogs.com/luyanliang/p/5498584.html

如果还不清楚,放大招了:

ORACLE 官方文档  Chapter 4. The class File Format  http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html

常用反编译工具:

1、jd-gui:最好用,但有时反编译出来的结果会有遗漏。

https://code.google.com/p/cxldemo/downloads/detail?name=jd-gui.exe&can=2&q

2、DJ Java Decompiler:相对jd-gui易用性上差一些,但是反编译过来的结果更准确。

http://www.neshkov.com/dj.html

3、jclasslib bytecode viewer:将字节码转化为JVM指令的工具。

http://sourceforge.net/projects/jclasslib/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值