コード例 #1
0
ファイル: attribute_info.py プロジェクト: kimi641/pyJVM
 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
ファイル: attribute_info.py プロジェクト: kimi641/pyJVM
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
ファイル: attribute_info.py プロジェクト: kimi641/pyJVM
 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
ファイル: attribute_info.py プロジェクト: kimi641/pyJVM
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
ファイル: class_file.py プロジェクト: kimi641/pyJVM
 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
ファイル: class_file.py プロジェクト: kimi641/pyJVM
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
ファイル: constant_pool.py プロジェクト: kimi641/pyJVM
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
ファイル: member_info.py プロジェクト: kimi641/pyJVM
def readMember(reader: ClassReader, cp) -> MemberInfo:
    return MemberInfo(cp, reader.readUint16(), reader.readUint16(),
                      reader.readUint16(), readAttributes(reader, cp))
コード例 #9
0
ファイル: member_info.py プロジェクト: kimi641/pyJVM
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
ファイル: cp_variables.py プロジェクト: kimi641/pyJVM
 def readInfo(self,reader:ClassReader):
     self.classIndex = reader.readUint16()
     self.nameAndTypeIndex = reader.readUint16()
コード例 #12
0
ファイル: cp_variables.py プロジェクト: kimi641/pyJVM
 def readInfo(self,reader:ClassReader):
     self.nameIndex = reader.readUint16()
     self.descriptorIndex = reader.readUint16()
コード例 #13
0
ファイル: cp_variables.py プロジェクト: kimi641/pyJVM
 def readInfo(self,reader:ClassReader):
     self.stringIndex = reader.readUint16()
コード例 #14
0
ファイル: cp_variables.py プロジェクト: kimi641/pyJVM
 def readInfo(self,reader:ClassReader):
     length = reader.readUint16()
     bts = reader.readBytes(length)
     self.str = bts.decode('utf-8')
コード例 #15
0
ファイル: cp_variables.py プロジェクト: kimi641/pyJVM
 def readInfo(self,reader:ClassReader):
     bts = reader.readUint64()
     self.val = struct.unpack('>d',bts)[0]
コード例 #16
0
ファイル: attribute_info.py プロジェクト: kimi641/pyJVM
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
ファイル: attribute_info.py プロジェクト: kimi641/pyJVM
 def readInfo(self, reader:ClassReader):
     self.info = reader.readBytes(self.length)
コード例 #18
0
ファイル: attribute_info.py プロジェクト: kimi641/pyJVM
 def readInfo(self, reader:ClassReader):
     self.exceptionIndexTable = reader.readUint16s()
コード例 #19
0
ファイル: attribute_info.py プロジェクト: kimi641/pyJVM
 def readInfo(self, reader:ClassReader):
     self.sourceFileIndex = reader.readUint16()
コード例 #20
0
ファイル: attribute_info.py プロジェクト: kimi641/pyJVM
 def readInfo(self, reader:ClassReader):
     self.constantValueIndex = reader.readUint16()