// @@@@@@@@@@@@@ Fields 
private boolean field_5016 ; 
private int field_5020 ; 
private boolean field_5024 ; 
private String field_5028 ;  // @@@@@@@@@@@@@ Static routines public <init>( com.ldware.smsfirewall.common.Options );
{
0 : enter_narrow 
1 : aload_0 
2 : invokespecial_lib java.lang.Object.<init>   // get_name_1:  net.rim.tools.compiler.codfile.Identifier@6c5e0272( java.lang.Object )   // get_name_2:  java.lang.Object.<init>
3 : aload_0 
4 : iconst_1 
5 : putfield .field_   // get_name_1:  .field_   // get_name_2:  .field_
6 : aload_0 
7 : bipush 7
8 : putfield .field_1   // get_name_1:  .field_1   // get_name_2:  .field_1
9 : aload_0 
10 : iconst_0 
11 : putfield .field_2   // get_name_1:  .field_2   // get_name_2:  .field_2
12 : aload_0 
13 : ldc_nullstr 
14 : putfield .field_3   // get_name_1:  .field_3   // get_name_2:  .field_3
15 : return 
}
这是一个构造函数,哪个高手可以解释一下?aload,iconst,ldc_nullstr。等等的是什么意思,我发现这个代码都是带a,i....等等的前缀,分别代表什么呢?

解决方案 »

  1.   

    我在这里给个参考大家
    源代码:
        private final Reader reader;
        private final StringBuffer buff;
        private boolean closed;
        public ReaderCharacterIterator(Reader reader)
        {
            this.reader = reader;
            this.buff = new StringBuffer(512);
            this.closed = false;
        }反编译后:
    private final java.io.Reader field_5766 ; 
    private final StringBuffer field_5770 ; 
    private boolean field_5774 ; public <init>( me.regexp.ReaderCharacterIterator, java.io.Reader );
    {
    0 : enter 
    1 : aload_0 
    2 : invokespecial_lib java.lang.Object.<init>   // get_name_1:  net.rim.tools.compiler.codfile.Identifier@6c5e0272( java.lang.Object )   // get_name_2:  java.lang.Object.<init>
    3 : aload_0 
    4 : aload_1 
    5 : putfield .field_   // get_name_1:  .field_   // get_name_2:  .field_
    6 : aload_0 
    7 : new_lib StringBuffer
    8 : dup 
    9 : sipush 512
    10 : invokespecial_lib java.lang.StringBuffer.<init>   // get_name_1:  net.rim.tools.compiler.codfile.Identifier@6c5e0272( java.lang.StringBuffer, int )   // get_name_2:  java.lang.StringBuffer.<init>
    11 : putfield .field_1   // get_name_1:  .field_1   // get_name_2:  .field_1
    12 : aload_0 
    13 : iconst_0 
    14 : putfield .field_2   // get_name_1:  .field_2   // get_name_2:  .field_2
    15 : return 
    }
      

  2.   

    这些是虚拟机命令..
    楼主有心学习的话可以去看看<深入JAVA虚拟机>
      

  3.   

    那么有没有什么工具,可以吧虚拟机的命令转换成java代码呢?
      

  4.   

    你用什么反编译工具啊,我都是用DJ Java Decompiler,也可能这个类用了混淆器编译。
      

  5.   

    这些是虚拟机命令..
    楼主有心学习的话可以去看看<深入JAVA虚拟机>
      

  6.   

    你应该看看 深入 JVM 那本书。里面的篇幅,一半都是在讲JVM指令。例如,
    public <init>( com.ldware.smsfirewall.common.Options );这个简单说来,就是
    com.ldware.smsfirewall.common.Options的构造函数。
      

  7.   

    我告诉你个反编译工具,反编译的效果还不错1、jad
    2、jd-gui个人推荐第二个 因为第二个是图形界面的操作,比较方便第一个是在CMD下操作的。
      

  8.   

    那些工具都不能反编译我的那个程序的,我是用专门的反编译工具反编译出来的,结果就是JVM指令!想问一下static final <clinit>()是什么方法?析构函数吗?