Esempio n. 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)
Esempio n. 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
Esempio n. 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()))
Esempio n. 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
Esempio n. 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)
Esempio n. 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
Esempio n. 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
Esempio n. 8
0
def readMember(reader: ClassReader, cp) -> MemberInfo:
    return MemberInfo(cp, reader.readUint16(), reader.readUint16(),
                      reader.readUint16(), readAttributes(reader, cp))
Esempio n. 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
Esempio n. 10
0
def readConstantInfo(reader: ClassReader, cp) -> ConstantInfo:
    tag = reader.readUint8()
    c = newConstantInfo(tag, cp)
    c.readInfo(reader)
    return c
Esempio n. 11
0
 def readInfo(self,reader:ClassReader):
     self.classIndex = reader.readUint16()
     self.nameAndTypeIndex = reader.readUint16()
Esempio n. 12
0
 def readInfo(self,reader:ClassReader):
     self.nameIndex = reader.readUint16()
     self.descriptorIndex = reader.readUint16()
Esempio n. 13
0
 def readInfo(self,reader:ClassReader):
     self.stringIndex = reader.readUint16()
Esempio n. 14
0
 def readInfo(self,reader:ClassReader):
     length = reader.readUint16()
     bts = reader.readBytes(length)
     self.str = bts.decode('utf-8')
Esempio n. 15
0
 def readInfo(self,reader:ClassReader):
     bts = reader.readUint64()
     self.val = struct.unpack('>d',bts)[0]
Esempio n. 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
Esempio n. 17
0
 def readInfo(self, reader:ClassReader):
     self.info = reader.readBytes(self.length)
Esempio n. 18
0
 def readInfo(self, reader:ClassReader):
     self.exceptionIndexTable = reader.readUint16s()
Esempio n. 19
0
 def readInfo(self, reader:ClassReader):
     self.sourceFileIndex = reader.readUint16()
Esempio n. 20
0
 def readInfo(self, reader:ClassReader):
     self.constantValueIndex = reader.readUint16()