????????写??????????????????ClassAnalyzer??ClassAnalyzer????????????????Java Class??????????????????????????????????????????????????????些?????????????????????JDK????????????泄???javap????????Class????????????????????????????????路??
????Class???
??????????????????????澹�???Class?????????????????????????Java???????“??写??危?????????”??Java??????娣�??Class?????????????婕�??????Class?????????????位????????些???????????魏畏??????????????Class????写娲�????????????????????械???????????????????????????????????????????????
????????Java??????娣�??Class????????????????C????????伪?????娲�?????????伪???????????????????????????????Java??????娣�??????u1??u2??u4??u8???????1??????2??????4??????8??????????????????????????????????????????????谩???????????????????????????????????????????????????????????????????????????????胁?喂??????????????????????Class??????????????????ClassAnalyzer??u1??u2??u4??u8???????byte??short??int??long??Class??????????????Java??
public class ClassFile {
public U4 magic;                            // magic
public U2 minorVersion;                     // minor_version
public U2 majorVersion;                     // major_version
public U2 constantPoolCount;                // constant_pool_count
public ConstantPoolInfo[] cpInfo;           // cp_info
public U2 accessFlags;                      // access_flags
public U2 thisClass;                        // this_class
public U2 superClass;                       // super_class
public U2 interfacesCount;                  // interfaces_count
public U2[] interfaces;                     // interfaces
public U2 fieldsCount;                      // fields_count
public FieldInfo[] fields;                  // fields
public U2 methodsCount;                     // methods_count
public MethodInfo[] methods;                // methods
public U2 attributesCount;                  // attributes_count
public BasicAttributeInfo[] attributes;     // attributes
}
??????谓???
???????Class???????????????校??????????Class?????姹�???????睢�???????????????????????????????????Class????卸???霉?????????????????????????????????????????????????????????????4??????????????伪??????????????????????????魏??????????????????????Class????????????????????????????伪??????????????????????????????????
???????????????Class?????????????????????娲�???械?????????????????????????????????????????????????????????Java??????娣�???????????????????????????????????????????????????????????????屑?????????
????· ??????????????????u1?????tag???????
????· ???????????????小??constantPoolCount????????1?????纾�???constantPoolCount????47???????????????46??????
????· ?????????????围??1????????纾�???constantPoolCount????47??????????????????围?1~46??????????0???????????????????“???????魏?????????????”??
????· CONSTANT_Utf8_info?????????邪???u1?????tag??u2?????length????length??u1????????bytes????length????????????????????MUTF-8??Modified UTF-8??????????????MUTF-8??UTF-8?????????????????????????null??????????2????0xC0??0x80???????????????????UTF-16??????????????????????????????????UTF-8????
??????????????????些??????械??????Class???????伪????????????????????????Java??????娣�??????????????ClassAnalyzer???????????????????????????????????????????????????tag????????????????????????????????????u2?????attribute_name_index??attribute_name_index????????械????CONSTANT_Utf8_info???????????贸???????????????????????????????ClassAnalyzer???????attribute_name_index???????????????????????????????????
??????伪?????????????????????????????????????????????????????????伪??????????u2?????access_flags?????u2?????name_index?????u2?????descriptor_index?????u2?????attributes_count??attributes_count??attribute_info?????attributes??????????????????????????attributes??????????????????????????
????Class???????????????????伪??????娲�????????access_flags?????????????????????????????????????????Code?????Code????娲�??Java???????????????????ClassAnalyzer?校?Code?????Java??????????????谐????????????
public class Code extends BasicAttributeInfo {
private short maxStack;
private short maxLocals;
private long codeLength;
private byte[] code;
private short exceptionTableLength;
private ExceptionInfo[] exceptionTable;
private short attributesCount;
private BasicAttributeInfo[] attributes;
...
private class ExceptionInfo {
public short startPc;
public short endPc;
public short handlerPc;
public short catchType;
...
}
}
??????Code?????校?codeLength??code???????娲�?????????????????????????????u1??????????????????????????code?械??????????????????????????????睢�???????codeLength?????u4?????????????????????????????????65535?????????睢�
???????????
????ClassAnalyzer????????????GitHub?????ClassAnalyzer??README?校???????????Class???????????Class??????????????????????????????????????????