概述:

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/

java字节码反编译_javap 反编译 java 字节码文件相关推荐

  1. idea如何反编译字节码指令_美团点评:Java字节码增强技术,线上问题诊断利器...

    作者简介:泽恩,美团到店住宿业务研发团队工程师.文章转载于公众号:美团技术团队 1. 字节码 1.1 什么是字节码? Java之所以可以"一次编译,到处运行",一是因为JVM针对各 ...

  2. stringbuilder class再反编译_JVM篇(02.class字节码解析)

    class文件是JVM的输入,是JVM实现平台无关.技术无关的基础.java虚拟机规范中定义了class文件的结构. class文件格式概述 我们先看下classFile的结构(查阅java 虚拟机规 ...

  3. android oat如何提取dex文件字节码,Android: 使用oatdump反编译oat文件

    网上经常看到有通过apktool将apk中的dex反编译成smali格式的文件,以便分析功能实现与破-解,确没怎么看到oat文件反通过oatdump反编译的,所以就写了一篇这样的文档.声明一下oat文 ...

  4. java反编译工具_漫话:如何给女朋友解释什么是编译与反编译

    戳蓝字"CSDN云计算"关注我们哦! 来源 | 漫话编程 某天下班后,我在家里进行电话面试,问到面试者这样一个问题:"你知道使用哪些办法可以反编译Java代码吗?&quo ...

  5. Java——编译与反编译

    ** 一.基础知识 ** 1.1 编程语言 在介绍编译和反编译之前,我们先来简单介绍下编程语言(Programming Language).编程语言(Programming Language)分为低级 ...

  6. Java代码的编译与反编译那些事儿

    GitHub 2.5k Star 的Java工程师成神之路 ,不来了解一下吗? GitHub 2.5k Star 的Java工程师成神之路 ,真的不来了解一下吗? GitHub 2.5k Star 的 ...

  7. Java基础04 编译与反编译

    1. 编译 编译: 把所写的高级语言所写作的源代码程序,转换成计算机能直接识别.执行的低级语言的程序,也就是可执行文件. Java语言的编译: Java语言作为一种高级语言,想要被执行就要通过编译将其 ...

  8. java编译和反编译

    Java开发必会的反编译知识(附支持对Lambda进行反编译的工具) (qq.com)https://mp.weixin.qq.com/s?__biz=MzI3NzE0NjcwMg==&mid ...

  9. Java 编译与反编译

    编程语言 在介绍编译和反编译之前,我们先来简单介绍下编程语言(Programming Language).编程语言(Programming Language)分为低级语言(Low-level Lang ...

最新文章

  1. Win32SDK中(串行)通信资源概要(不断更新)
  2. 中高级数论 [欧拉函数线性筛,二次剩余]
  3. 将Quarkus应用程序部署到AWS Elastic Beanstalk
  4. 不知道Mysql排序的特性,加班到12点,认了认了!
  5. 用代码证明自己闲的蛋疼(一)——cmd闪瞎狗眼
  6. 新版DevEco不用USB线下载程序
  7. 华为nova6升级鸿蒙os,华为公布升级计划:鸿蒙OS系统开始推送,覆盖百款机型
  8. python后台架构Django教程——manage.py命令
  9. sql 根据身份证号码计算年龄
  10. 汽车厂VIN码生成软件
  11. ios屏幕的旋转,Device Orientation
  12. js中try和catch的用法
  13. day02 软考习题理解
  14. 新版微信-微信公众号一键关注解决办法
  15. ADS 2019 安装 仿真
  16. JAVA.UTIL.ARRAYLIST 详解
  17. 2022中国眼博会,山东眼健康展,视力矫正仪器展,护眼产品展
  18. nth-child 实用技巧
  19. 51单片机入门(2)LED点亮的背后
  20. echarts 点击地图画布空白处 触发事件

热门文章

  1. Java:如何创建轻量级数据库微服务
  2. cglib_cglib:缺少的手册
  3. java运行时间间隔_Java:安排作业按时间间隔运行
  4. jsf 配置_JSF Tomcat配置示例
  5. 流利的接口不利于维护
  6. lambdas for_Java 8 Lambdas –缺少脱离Java的链接
  7. 从微服务到分布式系统-Java开发人员生存指南
  8. java中缓冲区和缓存_Java中的Google协议缓冲区
  9. jcmd:一个可以全部统治的JDK命令行工具
  10. 防盗Java EE –保护您的Java EE企业应用程序