Пример #1
0
 def readInfo(self, reader:ClassReader):
     self.maxStack = reader.readUint16()
     self.maxLocals = reader.readUint16()
     codeLength = struct.unpack('>I',reader.readUint32())[0]
     self.code = reader.readBytes(codeLength)
     self.exceptionTable = readExceptionTable(reader)
     self.attributes = readAttributes(reader, self.cp)
Пример #2
0
def readAttribute(reader:ClassReader, cp:ConstantPool) -> AttributeInfo:
    attrNameIndex = reader.readUint16()
    attrName = cp.getUtf8(attrNameIndex)
    attrLen = struct.unpack('>I',reader.readUint32())[0]
    attrInfo = newAttributeInfo(attrName, attrLen, cp)
    attrInfo.readInfo(reader)
    return attrInfo
Пример #3
0
 def readInfo(self, reader:ClassReader):
     lineNumberTableLength = reader.readUint16()
     self.lineNumberTable = []
     for i in range(lineNumberTableLength):
         self.lineNumberTable.append(LineNumberTableEntry(
             startPc     = reader.readUint16(),
             lineNumber  = reader.readUint16()))
Пример #4
0
def readExceptionTable(reader:ClassReader) -> List[ExceptionTableEntry]:
    exceptionTableLength = reader.readUint16()
    exceptionTable = []
    for i in range(exceptionTableLength):
        exceptionTable.append(ExceptionTableEntry(
            startPc     = reader.readUint16(),
            endPc       = reader.readUint16(),
            handlerPc   = reader.readUint16(),
            catchType   = reader.readUint16()))
    return exceptionTable
Пример #5
0
 def read(self, reader: ClassReader):
     self.readAndCheckMagic(reader)
     self.readAndCheckVersion(reader)
     self.constantPool = readConstantPool(reader)
     self.accessFlags = reader.readUint16()
     self.thisClass = reader.readUint16()
     self.superClass = reader.readUint16()
     self.interfaces = reader.readUint16s()
     self.fields = readMembers(reader, self.constantPool)
     self.methods = readMembers(reader, self.constantPool)
     self.attributes = readAttributes(reader, self.constantPool)
Пример #6
0
def Parse(classData: bytes):
    try:
        cr = ClassReader(classData)
        cf = ClassFile()
        cf.read(cr)
    except ValueError as err:
        print(sys.exc_info())
        return None, err
    return cf, None
Пример #7
0
def readConstantPool(reader: ClassReader) -> ConstantPool:
    cpCount = reader.readUint16()
    cp = ConstantPool([None] * cpCount)
    i = 1
    while i < cpCount:
        cp[i] = readConstantInfo(reader, cp)
        if (isinstance(cp[i], ConstantLongInfo)
                or isinstance(cp[i], ConstantDoubleInfo)):
            i += 1
        i += 1
    return cp
Пример #8
0
def readMember(reader: ClassReader, cp) -> MemberInfo:
    return MemberInfo(cp, reader.readUint16(), reader.readUint16(),
                      reader.readUint16(), readAttributes(reader, cp))
Пример #9
0
def readMembers(reader: ClassReader, cp) -> List[MemberInfo]:
    memberCount = reader.readUint16()
    members = []
    for i in range(memberCount):
        members.append(readMember(reader, cp))
    return members
Пример #10
0
def readConstantInfo(reader: ClassReader, cp) -> ConstantInfo:
    tag = reader.readUint8()
    c = newConstantInfo(tag, cp)
    c.readInfo(reader)
    return c
Пример #11
0
 def readInfo(self,reader:ClassReader):
     self.classIndex = reader.readUint16()
     self.nameAndTypeIndex = reader.readUint16()
Пример #12
0
 def readInfo(self,reader:ClassReader):
     self.nameIndex = reader.readUint16()
     self.descriptorIndex = reader.readUint16()
Пример #13
0
 def readInfo(self,reader:ClassReader):
     self.stringIndex = reader.readUint16()
Пример #14
0
 def readInfo(self,reader:ClassReader):
     length = reader.readUint16()
     bts = reader.readBytes(length)
     self.str = bts.decode('utf-8')
Пример #15
0
 def readInfo(self,reader:ClassReader):
     bts = reader.readUint64()
     self.val = struct.unpack('>d',bts)[0]
Пример #16
0
def readAttributes(reader:ClassReader, cp:ConstantPool) -> List[AttributeInfo]:
    attributesCount = reader.readUint16()
    attributes = []
    for i in range(attributesCount):
        attributes.append(readAttribute(reader, cp))
    return attributes
Пример #17
0
 def readInfo(self, reader:ClassReader):
     self.info = reader.readBytes(self.length)
Пример #18
0
 def readInfo(self, reader:ClassReader):
     self.exceptionIndexTable = reader.readUint16s()
Пример #19
0
 def readInfo(self, reader:ClassReader):
     self.sourceFileIndex = reader.readUint16()
Пример #20
0
 def readInfo(self, reader:ClassReader):
     self.constantValueIndex = reader.readUint16()