最近在研究反编译忽然看到 “字段的附加属性列表” 这么个名词 ,不是很理解 很迷惑  期待高手解决(如果觉得分少,我可以在+)
我解析到下面这个地方。
field_info fields[fields_count]; //主要用于记录class及实例中的变量
  field_info {
  u2 access_flags; 
  u2 name_index;    
  u2 descriptor_index;  
  u2 attributes_count;
  attribute_info attributes[attributes_count];
       attribute_info {//就是在这个attribute_info中说2的位置是属性列表的长度,3的位置放的是字段的附加属性列表的值
        u2 attribute_name_index;
        u4 attribute_length;//2
        u1 info[attribute_length];//3
      }
  }

解决方案 »

  1.   

    attributes 可以出现在好几个地方
    对于field中的attributes java虚拟机定义了两种 ,ConstantValue和Synthetic
    ConstantValue指的就是常量,Synthetic指的是编译器生成的,也就是说源代码里没定义,编译器帮我们加上的。
    对于method中的attributes java 虚拟机定义了Code,Exceptions和Synthetic
    还有ClassFile中,说明是一个内部类
    等等
      

  2.   

    如果要看的是java6的class文件,可以去jcp的网站下载jsr202文档 。里面有class 文件格式说明。
      

  3.   

    那就是说所有的常量的结构是
      2. Constantvalue : attribute_info被替代为:
      
      Constantvalue_attribute {
      u2 attribute_name_index;
      u4 attribute_length;  //必须为2
      u2 constantvalue_index;
      }那Synthetic 的结构是什么样的呢。
      

  4.   

    ConstantValue和Synthetic  的在class中主要描述的作用是什么。 个人感觉 就是主要描述那些是常量 那些不是。。 可真的是如此么??