javap

Bill-Mac:learning Bill$ javap -verbose Test
Compiled from "Test.java"
public class Test extends java.lang.Object
  SourceFile: "Test.java"
  minor version: 0
  major version: 50
  Constant pool:
const #1 = Method    #6.#15; //  java/lang/Object."<init>":()V
const #2 = String    #16;    //  ab1
const #3 = Field #17.#18;    //  java/lang/System.out:Ljava/io/PrintStream;
const #4 = Method    #19.#20;    //  java/io/PrintStream.println:(Ljava/lang/String;)V
const #5 = class #21;    //  Test
const #6 = class #22;    //  java/lang/Object
const #7 = Asciz <init>;
const #8 = Asciz ()V;
const #9 = Asciz Code;
const #10 = Asciz    LineNumberTable;
const #11 = Asciz    main;
const #12 = Asciz    ([Ljava/lang/String;)V;
const #13 = Asciz    SourceFile;
const #14 = Asciz    Test.java;
const #15 = NameAndType  #7:#8;//  "<init>":()V
const #16 = Asciz    ab1;
const #17 = class    #23;    //  java/lang/System
const #18 = NameAndType  #24:#25;//  out:Ljava/io/PrintStream;
const #19 = class    #26;    //  java/io/PrintStream
const #20 = NameAndType  #27:#28;//  println:(Ljava/lang/String;)V
const #21 = Asciz    Test;
const #22 = Asciz    java/lang/Object;
const #23 = Asciz    java/lang/System;
const #24 = Asciz    out;
const #25 = Asciz    Ljava/io/PrintStream;;
const #26 = Asciz    java/io/PrintStream;
const #27 = Asciz    println;
const #28 = Asciz    (Ljava/lang/String;)V;

{
public Test();
  Code:
   Stack=1, Locals=1, Args_size=1 //所有方法都会有,stack代表栈顶的单位大小(每个大小为1个slot,每个slot是4个字节宽度)
   0:    aload_0  //第一个0代表虚指令中的行号,每个方法从0开始递增,但是可以跳跃。
   1:    invokespecial   #1; //Method java/lang/Object."<init>":()V  //构造方法、父类构造方法以及非静态的private方法调用指令
   4:    return
  LineNumberTable:
   line 2: 0
注:当需要使用一个数据时,它首先会被放入栈顶,使用完后会写回到本地变量或主存中。这里栈的宽度是1,其实代表有一个this将会被引用。  Locals是本地变量的slo个数,但是并不代表与Stack宽度一致。(double、long会占用两个slot)  Args_size代表的是入口参数的个数,不再试slot的个数。  aload_0指令是讲“第一个”slot所在的本地变量推到栈顶,并且这个本地变量是引用类型的。
 

public static void main(java.lang.String[]);
  Code:
   Stack=3, Locals=3, Args_size=1
   0:    ldc #2; //String ab1
   2:    astore_1
   3:    ldc #2; //String ab1
   5:    astore_2
   6:    getstatic   #3; //Field java/lang/System.out:Ljava/io/PrintStream;
   9:    aload_2
   10:   dup
   11:   astore_1
   12:   invokevirtual   #4; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
   15:   return
  LineNumberTable:
   line 4: 0
   line 5: 3
   line 6: 6
   line 7: 15

}
时间: 2024-10-05 17:30:26

javap的相关文章

JDK自带反编译工具javap

在JDK的bin文件夹下,有许多自带工具: javap就是其中的一个,对应为 javap.exe javap可反编译查看Java编译器编译生成的字节码文件, 语法: javap [ options ] class options: -help 帮助 -l 输出行和变量的表 -public 只输出public方法和域 -protected 只输出public和protected类和成员 -package 只输出包,public和protected类和成员,这是默认的 -p -private 输出所

javap -c 输出字节码内容/命令含义一览

javap 命令 html,body { font-size: 15px } body { font-family: Helvetica, "Hiragino Sans GB", "微软雅黑", "Microsoft YaHei UI", SimSun, SimHei, arial, sans-serif; line-height: 1.6; margin: 0; padding: 1.33rem 1rem } h1,h2,h3,h4,h5,h6

eclipse中使用javap工具小结

关于javap的功能,百度百科上是这么解释的: javap javap是jdk自带的一个工具,可以反编译,也可以查看java编译器生成的字节码,是分析代码的一个好工具. 简单明了,大多时候真正的开发环境为linux系统,但是在windows下开发的时候又不习惯dos窗口的化,eclipse为我们提供了 javap的详细使用: 我们能够在eclipse中使用javap工具,我们有必要了解一下在eclipse中的Variables这个东西.这个英文单词的意思是变量集合的意思,意思就是我们以某些简短的

Java命令学习系列(7):Javap(转)

原文出处: Hollis(@Hollis_Chuang) javap是jdk自带的一个工具,可以对代码反编译,也可以查看java编译器生成的字节码. 一般情况下,很少有人使用javap对class文件进行反编译,因为有很多成熟的反编译工具可以使用,比如jad.但是,javap还可以查看java编译器为我们生成的字节码.通过它,可以对照源代码和字节码,从而了解很多编译器内部的工作. 实例 javap命令分解一个class文件,它根据options来决定到底输出什么.如果没有使用options,那么

javap -- Java 类文件解析器

参考文档 http://blog.chinaunix.net/uid-692788-id-2681132.html http://docs.oracle.com/javase/7/docs/technotes/tools/solaris/javap.html 功能说明:Java 类文件解析器. 语法:javap [ 命令选项 ] class. . . 补充说明: javap 命令用于解析类文件.其输出取决于所用的选项.若没有使用选项,javap 将输出传递给它的类的 public 域及方法.ja

说说javap命令

javap定义 javap是 Java class文件分解器,可以反编译(即对javac编译的文件进行反编译),也可以查看java编译器生成的字节码.用于分解class文件. 测试类 public class JavapTest { private static final int _P_1 = 1; public static final int _P_2 = 2; public static void main(String[] args) { int m = 0, n = 0; for (

为eclipse配置javap命令

javap命令常用来对java类文件来进行反编译,主要用来对java进行分析的工具,在学习Thinking in Java时,由于需要对类文件反编译,以查看jvm到底对我们写的代码做了哪些优化和处理,比如我看的使用+=对字符串进行拼接时,jvm的处理方式.废话不多说,下面直接带上配置的教程: 点击菜单栏 Run --->  External tools ---> External tools Configurations...    然后如下图点击New 输入: Name: javap Loc

javap在eclipse中的配置

下午学到静/动态绑定,接触到了javap这个东东,结果就去配置它.然后去百度,找啊找,按照网上说的,试了一个又一个,一直没成功,最后跑到群里问学长,和学长讨论半天,才最终配置好.我觉得会有不少菜鸟也会遇到我这样的问题,所以决定写下来. 其实我参考了下面两篇文章 http://www.tuicool.com/articles/MNBn22Z http://blog.sina.com.cn/s/blog_6e5e78bf0101okuj.html 但是就算看了之后,还是不断出错.关键还是对$,{}这

How to decompile class file in Java and Eclipse - Javap command example(转)

Ability to decompile a Java class file is quite helpful for any Java developer who wants to look into the source of any open source or propriety library used in project. Though I always prefer to attach source in Eclipse of most common libraries like

java自带的一个反汇编工具javap(disassembler)

在cmd输入javap显示,前提你电脑的java环境要配置好 用法: javap <options> <classes> 其中, 可能的选项包括:   -help  --help  -?        输出此用法消息   -version                 版本信息   -v  -verbose             输出附加信息   -l                       输出行号和本地变量表   -public                  仅显示