`
solomongg
  • 浏览: 53047 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

javap的使用

JVM 
阅读更多

javap是jdk自带的一个工具,可以反编译,也可以查看java编译器生成的字节码,是分析代码的一个好工具。
javap - Java class文件分解器
  分解class文件

摘要:
  javap [ options ] class. . .

描述:
  javap命令分解一个class文件,它根据options来决定到底输出什么。如果没有使用options,那么javap将会输出包,类里的 protected和public域以及类里的所有方法。javap将会把它们输出在标准输出上。来看这个例子,先编译下面这个类。

Java代码  收藏代码
  1. import  java.awt.*;  
  2.  import  java.applet.*;  
  3.   
  4.  public   class  DocFooter  extends  Applet {  
  5.       String date;  
  6.       String email;  
  7.   
  8.       public   void  init() {  
  9.               resize(500 , 100 );  
  10.               date = getParameter("LAST_UPDATED" );  
  11.               email = getParameter("EMAIL" );  
  12.       }  
  13.   
  14.       public   void  paint(Graphics g) {  
  15.               g.drawString(date + " by " , 100 15 );  
  16.               g.drawString(email,290 , 15 );  
  17.       }  
  18.  }  


在命令行上键入javap DocFooter后,输出结果如下

Java代码  收藏代码
  1. Compiled from DocFooter.java  
  2. public   class  DocFooter  extends  java.applet.Applet {  
  3.  java.lang.String date;  
  4.  java.lang.String email;  
  5.  public  DocFooter();  
  6.  public   void  init();  
  7.  public   void  paint(java.awt.Graphics);  
  8. }  


如果加入了-c,即javap -c DocFooter,那么输出结果如下

Java代码  收藏代码
  1.    Compiled from DocFooter.java  
  2. public   class  DocFooter  extends  java.applet.Applet {  
  3.     java.lang.String date;  
  4.     java.lang.String email;  
  5.     public  DocFooter();  
  6.     public   void  init();  
  7.     public   void  paint(java.awt.Graphics);  
  8. }  
  9.   
  10. Method DocFooter()  
  11.    0  aload_0  
  12.    1  invokespecial # 1    
  13.    4   return   
  14.   
  15. Method void  init()  
  16.    0  aload_0  
  17.    1  sipush  500   
  18.    4  bipush  100   
  19.    6  invokevirtual # 2    
  20.    9  aload_0  
  21.   10  aload_0  
  22.   11  ldc # 3    
  23.   13  invokevirtual # 4    
  24.   16  putfield # 5    
  25.   19  aload_0  
  26.   20  aload_0  
  27.   21  ldc # 6    
  28.   23  invokevirtual # 4    
  29.   26  putfield # 7    
  30.   29   return   
  31.   
  32. Method void  paint(java.awt.Graphics)  
  33.    0  aload_1  
  34.    1   new  # 8    
  35.    4  dup  
  36.    5  invokespecial # 9    
  37.    8  aload_0  
  38.    9  getfield # 5    
  39.   12  invokevirtual # 10    
  40.   15  ldc # 11    
  41.   17  invokevirtual # 10    
  42.   20  invokevirtual # 12    
  43.   23  bipush  100   
  44.   25  bipush  15   
  45.   27  invokevirtual # 13    
  46.   30  aload_1  
  47.   31  aload_0  
  48.   32  getfield # 7    
  49.   35  sipush  290   
  50.   38  bipush  15   
  51.   40  invokevirtual # 13    
  52.   43   return   
  53.    


当然,如果想分析这个文件,可以讲输出结果输出到一个文件里。可以这样写
javap -c DocFooter > F://test.txt
这样就会输出到F盘的test.txt文件中了。

选项:
   -help 不说了
   -l 输出行和变量的表
   -public 只输出public方法和域
   -protected 只输出public和protected类和成员
   -package 只输出包,public和protected类和成员,这是默认的
   -private  输出所有类和成员
   -s 输出内部类型签名
   -c 输出分解后的代码,例如,类中每一个方法内,包含java字节码的指令,
   -verbose 输出栈大小,方法参数的个数
   。。。

http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/javap.html

分享到:
评论

相关推荐

    javap使用说明文档

    javap 使用说明文档 javap 是 JDK 中的一个命令行工具,主要用于对给定的 class 文件进行反编译,了解 Java 编译器内部的工作机制,并提高程序执行的效率。下面是 javap 的使用说明。 1. javap 的基本用法 javap ...

    javap使用(1).docx

    ### javap 使用详解 #### 一、概述 `javap` 是 Java 开发工具包 (JDK) 中的一个重要工具,主要用于反编译 `.class` 文件中的字节码。通过 `javap`,开发者能够深入了解 Java 编译器是如何处理源代码并生成字节码的...

    windows命令行中java和javac、javap使用详解(java编译命令)

    在Windows命令行中使用Java和相关命令如javac(Java编译器)和javap(Java类文件反编译器)是Java开发者的基本技能。为了深入理解这些命令的使用方法,让我们逐步详细地讨论每一个命令的具体用法和相关知识点。 ...

    javap2p技术内幕.part2.rar

    javap2p 技术内幕javap2p 技术内幕javap2p 技术内幕javap2p 技术内幕

    JVM 字节码从入门到精通

    javap使用不同的参数可以提供不同详细程度的信息输出。例如,使用-v参数可以输出更详尽的信息,包括类的版本、修饰符、接口等,而使用-c参数可以反编译代码。 通过学习和分析字节码文件,开发者可以更好地理解Java...

    javap写的完整记事本

    这款“javap写的完整记事本”是一个很好的学习资源,对于想要了解如何使用Java Swing构建桌面应用,尤其是涉及文本编辑功能的开发者来说,它可以提供宝贵的实践经验。通过阅读和分析源代码,你可以深入理解Java GUI...

    Java运行原理 javap命令运行结果

    此外,还学习了如何使用`javap`命令来查看字节码文件的具体内容,这对于理解Java程序在底层的运行机制非常重要。 以上就是关于Java运行原理及javap命令运行结果的相关知识点的详细介绍。希望对你有所帮助!

    javap命令的使用技巧

    Java 中 javap 命令的使用技巧 javap 命令是 JDK 自带的一个工具,它可以对代码反编译,也可以查看 Java 编译器生成的字节码,对代码的执行过程进行分析,了解 JVM 内部的工作。javap 命令可以将 class 文件反编译...

    使用类分解器Javap分析Java字节码

    在这个话题中,我们将深入探讨如何使用`Javap`作为类分解器来解析和理解Java字节码。 首先,让我们了解`Javap`的基本用法。在命令行中,你可以通过以下格式调用`Javap`: ```bash javap [选项] 类名 ``` 其中,`...

    ndk开发实战javap签名篇

    标题“ndk开发实战javap签名篇”指向了一个针对使用NDK进行Android应用开发过程中的具体技术实践——使用javap命令来获取Java类的签名信息,并生成相应的C/C++头文件,这对于在C/C++代码中调用Java层的方法是必需的...

    HelloWorld的javap -verbose HelloWorld 字节码初探

    2. **javap工具的使用**:详细介绍如何使用`javap`命令,包括基础用法和`-verbose`等高级选项的含义与作用。 3. **JVM指令集**:讲解JVM指令集的主要指令,如ALOAD(加载本地变量)、ICONST(常量加载)、IRETURN...

    javaP2P总结

    例如,BitTorrent协议使用了块级校验和(如SHA1)确保数据完整性。 7. **NAT穿透**:由于许多P2P节点可能位于NAT(网络地址转换)之后,直接通信变得复杂。STUN(简单Traversal of UDP through NATs)、TURN...

    JavaP7架构师课程 JavaP7架构师课程

    JavaP7架构师课程

    Java的class文件结构介绍以及如何实现javap

    NULL 博文链接:https://bolinyang.iteye.com/blog/1830472

    JavaP2P技术内幕 part4

    标题:"JavaP2P技术内幕 part4" 描述:"JavaP2P技术内幕太大不能上传,分5部分传递" 从标题和描述中,我们可以提炼出的关键知识点主要围绕JavaP2P技术,即Java对等网络(Peer-to-Peer Network)技术。在IT行业中,...

    JavaP2P技术内幕 part3

    标题:"JavaP2P技术内幕 part3" 描述:"JavaP2P技术内幕太大不能上传,分5部分传递" 从标题和描述中,我们可以提炼出的关键知识点主要围绕JavaP2P技术,即Java对等网络(Peer-to-Peer Network)技术。P2P技术在...

    eclipse配置javap命令的方法

    总的来说,通过上述步骤,开发者可以在Eclipse中快速便捷地使用`javap`命令,深入理解Java代码在JVM中的运行方式,从而提升编程技能和解决问题的能力。对于Java开发者来说,掌握这一技巧是非常有益的。

    javap-Tool:JAVA项目

    在`javap-Tool-master`这个压缩包中,很可能包含了一个关于如何使用`javap`工具的示例项目或教程。通过研究这个项目,你可以深入理解`javap`的用法,并学会如何在实际开发中运用它来提升你的编程技能。对于Java...

    sbt-javap:直接从SBT控制台运行Javap

    要使用sbt-javap ,请将以下内容添加到project/plugins.sbt :addSbtPlugin( " org.spire-math " % " sbt-javap " % " 0.0.1 " )用法sbt-javap提供了一项新的SBT任务: javap 。 该命令使用一个类的全限定名,将该...

    javap写的一个动态日历

    【标题】:“javap写的一个动态日历” 这个标题表明我们正在讨论一个使用Java编程语言编写的日历程序。`javap`在这里可能被误用,实际上`javap`是Java平台的标准工具,用于反汇编Java类文件,展示字节码和相关的元...

Global site tag (gtag.js) - Google Analytics