SmallVMJavaJavaClassJavaClassJavaGolangClass
Class文件
ClassJavaClassClassClass
JavaClassCJavau1u2u4u81248ClassSmallVMu1u2u4u8uint8uint16uint32uint64Class
type ClassFile struct {
magic uint32
minorVersion uint16
majorVersion uint16
constantPoolCount uint16
constantPool []constantpool.ConstantInfo
accessFlags uint16
thisClass uint16
superClass uint16
interfacesCount uint16
interfaces []uint16
fieldsCount uint16
fields []FieldInfo
methodsCount uint16
methods []MethodInfo
attributesCount uint16
attributes []attribute.AttributeInfo
}
type FieldInfo struct {
accessFlags uint16
nameIndex uint16
descriptorIndex uint16
attributesCount uint16
attributes []attribute.AttributeInfo
}
type MethodInfo struct {
accessFlags uint16
nameIndex uint16
descriptorIndex uint16
attributesCount uint16
attributes []attribute.AttributeInfo
}
如何解析
ClassClassClass4Class
ClassJava
u1tagconstantPoolCount1constantPoolCount47461constantPoolCount471~460CONSTANT_Long_infoCONSTANT_Double_infonn+2n+1CONSTANT_Utf8_infou1tagu2lengthlengthu1byteslengthMUTF-8Modified UTF-8)MUTF-8UTF-8null20xC00x80UTF-16
ClassJavaSmallVMtagu2attribute_name_indexattribute_name_indexCONSTANT_Utf8_infoSmallVMattribute_name_index
u2access_flagsu2name_indexu2descriptor_indexu2attributes_countattributes_countattribute_infoattributesattributes
Classaccess_flagsCodeCodeJavaSmallVMCode
type Code struct {
pool []constantpool.ConstantInfo
attributeNameIndex uint16
attributeLength uint32
maxStack uint16
maxLocals uint16
codeLength uint32
code []byte
exceptionTableLength uint16
exceptionTable []ExceptionInfo
attributesCount uint16
attributes []AttributeInfo
}
type ExceptionInfo struct {
startPc uint16
endPc uint16
handlerPc uint16
catchType uint16
}
CodecodeLengthcodeu1codecodeLengthu465535
代码实现
ClassSmallVMsrc/classfileClassClass