def processClassComp(self, descCmp):
        classCount = 0

        start = 0
        length = 2
        infTag = Util.convertDataToPrint(self.binData, start, length)
        print('    tag, ' + infTag)

        start += length
        length = 4
        size = Util.convertDataToPrint(self.binData, start, length)
        print('    size, ' + "0x" + size)

        start += length
        length = 4
        sigLength = (int)(Util.convertDataToPrint(self.binData, start, length))
        print('    signature pool length, ', sigLength)

        while ((sigLength) > 0):
            #define when package defines any remote interfaces or remote classes.
            start, length = self.typeDescriptor(start, length)
            sigLength -= 1

        #get class count from descriptor component
        while (classCount < descCmp.getClassCount()):
            print('    class, ', classCount + 1)
            start, length = self.interfaceClassInfo(start, length)
            classCount += 1
            print(' ')
    def processMethodComp(self, cpCmp, prnt):
        start = 0
        length = 2
        infTag = Util.convertDataToPrint(self.binData, start, length)
        Util.printOnConsole(('    tag, ' + infTag), prnt)

        start += length
        length = 4
        size = Util.convertDataToPrint(self.binData, start, length)
        Util.printOnConsole(('    size, ' + "0x" + size), prnt)

        start += length
        length = 2
        hndlrCount = (int)(Util.convertDataToPrint(self.binData, start,
                                                   length), 16)
        Util.printOnConsole(
            ('    exception handlers count, ' + str(hndlrCount)), prnt)

        while ((hndlrCount) > 0):
            start, length = self.processExceptionHandlerInfo(
                cpCmp, start, length, prnt)
            hndlrCount -= 1

        byteCodeCount = (int)(size, 16) - (start)
        start, length = self.parseMethodInfo(start, length, byteCodeCount,
                                             prnt)
    def processClassExportInfo(self, start, length):
        start += length
        length = 4
        classOffset = Util.convertDataToPrint(self.binData, start, length)
        print('        class_offset, ', classOffset)

        start += length
        length = 2
        static_field_count = (int)(Util.convertDataToPrint(
            self.binData, start, length), 16)
        print('        static_field_count, ', static_field_count)

        start += length
        length = 2
        static_method_count = (int)(Util.convertDataToPrint(
            self.binData, start, length), 16)
        print('        static_method_count, ', static_method_count)

        index = 0
        while index < static_field_count:
            start += length
            length = 4
            static_field_offsets = Util.convertDataToPrint(
                self.binData, start, length)
            print('        static_field_offsets, ', static_field_offsets)

        index = 0
        while index < static_method_count:
            start += length
            length = 4
            static_method_offsets = Util.convertDataToPrint(
                self.binData, start, length)
            print('        static_method_offsets, ', static_method_offsets)

        return start, length
    def processPackageInfo(self, binData, start, length):
        start += length
        length = 2
        minVrsn = Util.convertDataToPrint(binData, start, length)

        start += length
        length = 2
        majVrsn = Util.convertDataToPrint(binData, start, length)
        print('        package version ', majVrsn + '.' + minVrsn)

        start += length
        length = 2
        aidLength = (int)(Util.convertDataToPrint(binData, start, length), 16)
        print('        package aid length, ', aidLength)

        aid = ''
        index = 0
        while index < aidLength:
            start += length
            length = 2
            aid += '0x' + Util.convertDataToPrint(binData, start, length) + ':'
            index += 1
        print('        package aid ' + aid)

        return start, length
示例#5
0
    def customComponentInfo(self, start, length):
        start += length
        length = 2
        infTag = Util.convertDataToPrint(self.binData, start, length)
        print('        custom component tag, ' + infTag)

        start += length
        length = 4
        size = Util.convertDataToPrint(self.binData, start, length)
        print('        custom component size, ' + "0x" + size)

        start += length
        length = 2
        aidLength = Util.convertDataToPrint(self.binData, start, length)
        print('        custom component aid length, ' + "0x" + aidLength)

        aid = ''
        for item in range((int)(aidLength, 16)):
            start += length
            length = 2
            aid += '0x' + Util.convertDataToPrint(self.binData, start,
                                                  length) + ':'

        print('        custom component aid ' + aid)

        return start, length
示例#6
0
    def processIntegerInfo(self, binData, start, length):
        infTag = Util.convertDataToPrint(binData, start, length)
        print('            tag, ' + infTag)

        start += length
        length = 8
        value = Util.convertDataToPrint(binData, start, length)

        print('            bytes, ' + value)
        return start, length
示例#7
0
    def processClassRefInfo(self, binData, start, length):
        infTag = Util.convertDataToPrint(binData, start, length)
        print('            tag, ' + infTag)

        start += length
        length = 4
        nameIndex = Util.convertDataToPrint(binData, start, length)

        print('            name index into the constant_pool table, ' +
              nameIndex)
        return start, length
            def processDescriptorInfo(self, binData, start, length, prnt):
                start += length
                length = 2
                accessFlag = (int)(Util.convertDataToPrint(
                    binData, start, length), 16)
                if (0x01 == accessFlag):
                    Util.printOnConsole(('        Field is Public '), prnt)
                if (0x02 == accessFlag):
                    Util.printOnConsole(('        Field is Private '), prnt)
                if (0x04 == accessFlag):
                    Util.printOnConsole(('        Field is Protected '), prnt)
                if (0x08 == accessFlag):
                    Util.printOnConsole(('        Field is Static '), prnt)
                if (0x10 == accessFlag):
                    Util.printOnConsole(('        Field is Final '), prnt)

                if (0x08 == accessFlag):
                    start, length = ConstantPoolComp().staticFieldRefInfo(
                        binData, start, length, prnt)
                else:
                    start, length = ConstantPoolComp().classRefProcess(
                        binData, start, length, prnt)
                    start += length
                    length = 2
                    token = (int)(Util.convertDataToPrint(
                        binData, start, length), 16)
                    Util.printOnConsole((
                        '        Token of the class which declares this field '
                        + str(token)), prnt)

                start += length
                length = 4
                dataType = (int)(Util.convertDataToPrint(
                    binData, start, length), 16)
                if ((dataType & 0x8000) == 0x8000):
                    if (0x0002 == (dataType & 0x000F)):
                        Util.printOnConsole(
                            ('        The field type is boolean'), prnt)
                    if (0x0003 == (dataType & 0x000F)):
                        Util.printOnConsole(('        The field type is byte'),
                                            prnt)
                    if (0x0004 == (dataType & 0x000F)):
                        Util.printOnConsole(
                            ('        The field type is short'), prnt)
                    if (0x0005 == (dataType & 0x000F)):
                        Util.printOnConsole(('        The field type is int'),
                                            prnt)
                else:
                    Util.printOnConsole((
                        '        The field type is reference and the offset into type descriptor info '
                        + str((dataType & 0x7FFF))), prnt)

                return start, length, self
示例#9
0
    def itableswitch(self, index, byteCode, start, prnt): 	
        Util.printOnConsole(('              '+ self.ByteCodeTable[byteCode]), prnt)
        start += 2
        length = 4
        
        start += length
        length = 8
        low = (int)(Util.convertDataToPrint(self.binData, start, length), 16)

        start += length
        length = 8        
        high = (int)(Util.convertDataToPrint(self.binData, start, length), 16)
        arrsize = high - low + 1;  
        return (11 + (arrsize*2))
    def typeDescriptor(self, start, length):
        start += length
        length = 2
        nibbleCount = (int)(Util.convertDataToPrint(self.binData, start,
                                                    length), 16)

        indx = 0
        while (indx < ((nibbleCount + 1) / 2)):
            start += length
            length = 1
            typeNibble = (int)(Util.convertDataToPrint(self.binData, start,
                                                       length), 16)
            if (0x1 == typeNibble):
                print('        The type is void')
            if (0x2 == typeNibble):
                print('        The type is boolean')
            if (0x3 == typeNibble):
                print('        The type is byte')
            if (0x4 == typeNibble):
                print('        The type is short')
            if (0x5 == typeNibble):
                print('        The type is int')
            if (0x6 == typeNibble):
                print('        The type is reference')
                start, length = ConstantPoolComp().classRefProcess(
                    self.binData, start, length, 'printOnConsole')
                #padding
                start += length

            if (0xA == typeNibble):
                print('        The type is array of boolean')
            if (0xB == typeNibble):
                print('        The type is array of byte')
                #padding
                start += length

            if (0xC == typeNibble):
                print('        The type is array of short')
            if (0xD == typeNibble):
                print('        The type is array of int')
            if (0xE == typeNibble):
                print('        The type is array of reference')
                start, length = ConstantPoolComp().classRefProcess(
                    self.binData, start, length, 'printOnConsole')
                #padding
                start += length

        return start, length
 def parseTheInfoForTheGivenIndex(self, index, prnt):
     start = self.constantPoolTable[index]
     length = 2
     tag = Util.convertDataToPrint(self.binData, start, length)
     if (tag == '01'):
         Util.printOnConsole(('        tag ' + tag), prnt)
         Util.printOnConsole(('            CONSTANT_ClassRefInfo '), prnt)
         return self.classRefInfo(start, length, prnt)
     elif (tag == '02'):
         Util.printOnConsole(('        tag ' + tag), prnt)
         Util.printOnConsole(('            CONSTANT_InstanceFieldRefInfo '),
                             prnt)
         return self.instanceFieldRefInfo(start, length, prnt)
     elif (tag == '03'):
         Util.printOnConsole(('        tag ' + tag), prnt)
         Util.printOnConsole(('            CONSTANT_VirtualMethodRefInfo '),
                             prnt)
         return self.virtualMethoddRefInfo(start, length, prnt)
     elif (tag == '04'):
         Util.printOnConsole(('        tag ' + tag), prnt)
         Util.printOnConsole(('            CONSTANT_SuperMethodRefInfo '),
                             prnt)
         return self.superMethoddRefInfo(start, length, prnt)
     elif (tag == '05'):
         Util.printOnConsole(('        tag ' + tag), prnt)
         Util.printOnConsole(('            CONSTANT_StaticFieldRefInfo '),
                             prnt)
         return self.staticFieldRefInfo(self.binData, start, length, prnt)
     elif (tag == '06'):
         Util.printOnConsole(('        tag ' + tag), prnt)
         Util.printOnConsole(('            CONSTANT_StaticMethodRefInfo '),
                             prnt)
         return self.staticMethodRefInfo(start, length, prnt)
    def arrayInitValues(self, start, length, valueSize):
        start += length
        length = 4
        count = (int)(Util.convertDataToPrint(self.binData, start, length), 16)
        print('        count, ', count)

        index = 0
        print('        initial values of the array, ')
        while (index < count):
            start += length
            length = valueSize
            value = (int)(Util.convertDataToPrint(self.binData, start, length),
                          16)
            print('                                ', value)
            index += 1

        return start, length
    def processExceptionHandlerInfo(self, cpCmp, start, length, prnt):
        start += length
        length = 4
        startOffset = (int)(Util.convertDataToPrint(self.binData, start,
                                                    length), 16)
        Util.printOnConsole(
            ('    start offset (beginning of the try block), ' +
             str(startOffset)), prnt)

        start += length
        length = 4
        bitField = (int)(Util.convertDataToPrint(self.binData, start, length),
                         16)
        stopBit = ((bitField & 0x8000) == 0x8000)
        if (stopBit):
            Util.printOnConsole(('    stop bit is high'), prnt)
        else:
            Util.printOnConsole(('    stop bit is low'), prnt)

        activeLength = (bitField & 0x7FFF)
        Util.printOnConsole(
            ('    active length of the handler block, ' + str(activeLength)),
            prnt)

        start += length
        length = 4
        handlerOffset = (int)(Util.convertDataToPrint(self.binData, start,
                                                      length), 16)
        Util.printOnConsole((
            '    handler offset in the method component (catch/finally block), '
            + str(handlerOffset)), prnt)

        start += length
        length = 4
        catchTypeIndex = (int)(Util.convertDataToPrint(self.binData, start,
                                                       length), 16)
        Util.printOnConsole(('    catch type index, ' + str(catchTypeIndex)),
                            prnt)

        if (catchTypeIndex):
            Util.printOnConsole((
                '    class info of the exception class caught by the exception handler, '
            ), prnt)
            cpCmp.parseTheInfoForTheGivenIndex(catchTypeIndex)

        return start, length
示例#14
0
    def processUtf8Info(self, binData, start, length):
        infTag = Util.convertDataToPrint(binData, start, length)
        print('            tag, ' + infTag)

        start += length
        length = 4
        byteLenth = Util.convertDataToPrint(binData, start, length)
        print('            string length, ' + byteLenth)
        nameBytes = ''
        for item in range((int)(byteLenth, 16)):
            start += length
            length = 2
            nameBytes += chr(
                int(Util.convertDataToPrint(binData, start, length), 16))

        print('            string, ' + nameBytes)
        return start, length
    def processStaticFieldComp(self):
        start = 0
        length = 2
        infTag = Util.convertDataToPrint(self.binData, start, length)
        print('    tag, ' + infTag)

        start += length
        length = 4
        size = Util.convertDataToPrint(self.binData, start, length)
        print('    size, ' + "0x" + size)

        start += length
        length = 4
        imageSize = (int)(Util.convertDataToPrint(self.binData, start, length),
                          16)
        print('    image_size, ', imageSize)

        start += length
        length = 4
        refCount = (int)(Util.convertDataToPrint(self.binData, start, length),
                         16)
        print('    reference_count, ', refCount)

        start += length
        length = 4
        arrayInitCount = (int)(Util.convertDataToPrint(self.binData, start,
                                                       length), 16)
        print('    array_init_count, ', arrayInitCount)

        index = 0
        while index < arrayInitCount:
            start, length = self.arrayInitInfo(start, length)
            index += 1

        start += length
        length = 4
        defaultValueCount = (int)(Util.convertDataToPrint(
            self.binData, start, length), 16)
        print('    default_value_count, ', defaultValueCount)

        start += length
        length = 4
        nonDefaultValueCount = (int)(Util.convertDataToPrint(
            self.binData, start, length), 16)
        print('    non_default_value_count, ', nonDefaultValueCount)

        index = 0
        print('        non-default values of the array, ')
        while index < nonDefaultValueCount:
            start += length
            length = 2
            value = (int)(Util.convertDataToPrint(self.binData, start, length),
                          16)
            print('                                ', value)
            index += 1
    def processUTF8Info(self, start, length):
        start += length
        length = 4
        string_length = (int)(Util.convertDataToPrint(self.binData, start,
                                                      length), 16)
        #print('        string length, ',string_length)

        name = ''
        index = 0
        while index < string_length:
            start += length
            length = 2
            name += chr(
                int(Util.convertDataToPrint(self.binData, start, length), 16))
            index += 1
        print('                      ' + name)

        return start, length
    def processPackageNameInfo(self, start, length):
        start += length
        length = 2
        nameLength = (int)(Util.convertDataToPrint(self.binData, start,
                                                   length), 16)
        print('            package name length ', nameLength)

        name = ''
        index = 0
        while index < nameLength:
            start += length
            length = 2
            name += chr(
                int(Util.convertDataToPrint(self.binData, start, length), 16))
            index += 1
        print('            package name ' + name)

        return start, length
    def classRefProcess(self, binData, start, length, prnt):
        start += length
        length = 4
        classRef = Util.convertDataToPrint(binData, start, length)
        extrnalRef = ((int(Util.convertDataToPrint(binData, start, 2), 16)
                       & 0x80) == 0x80)
        if (extrnalRef):
            packageToken = Util.convertDataToPrint(classRef, 0, 2)
            Util.printOnConsole(
                ('               Package Token: ' + packageToken), prnt)
            classToken = Util.convertDataToPrint(classRef, 2, 2)
            Util.printOnConsole(('               Class Token: ' + classToken),
                                prnt)
        else:
            Util.printOnConsole(
                ('               Internal Class Ref: ' + classRef), prnt)

        return start, length
    def classRefInfo(self, start, length, prnt):
        start, length = self.classRefProcess(self.binData, start, length, prnt)

        start += length
        length = 2
        padding = Util.convertDataToPrint(self.binData, start, length)
        Util.printOnConsole(('               padding ' + padding), prnt)

        return start, length
示例#20
0
    def processAppletComp(self):
        start = 0
        length = 2
        infTag = Util.convertDataToPrint(self.binData, start, length)
        print ('    tag, '+infTag)
            
        start += length 
        length = 4
        size = Util.convertDataToPrint(self.binData, start, length)
        print('    size, '+"0x"+size)
        
        start += length 
        length = 2
        count = Util.convertDataToPrint(self.binData, start, length)
        print('    count, ', count)

        for item in range((int)(count, 16)):
            start, length = self.processAppletsInfo(start, length)
    def parseMethodInfo(self, start, length, byteCodeCount, prnt):
        start += length
        length = 2
        bitField = (int)(Util.convertDataToPrint(self.binData, start, length),
                         16)
        flags = ((bitField & 0xF0) >> 4)
        if (0x08 == flags):
            Util.printOnConsole(('    Method is extended method'), prnt)
        elif (0x04 == flags):
            Util.printOnConsole(('    Method is abstract method'), prnt)

        maxStack = (bitField & 0x0F)
        Util.printOnConsole(
            ('        Max stack required for the execution of this method, ' +
             str(maxStack)), prnt)

        start += length
        length = 2
        bitField = (int)(Util.convertDataToPrint(self.binData, start, length),
                         16)
        nargs = ((bitField & 0xF0) >> 4)
        Util.printOnConsole((
            '        Number of arguments including this pointer for virtual methods, '
            + str(nargs)), prnt)

        maxLocals = (bitField & 0x0F)
        Util.printOnConsole(
            ('        Number of locals declared by this method, ' +
             str(maxLocals)), prnt)

        Util.printOnConsole(('    ByteCode, '), prnt)
        indx = 0
        start += length
        while (indx < byteCodeCount):
            length = 2
            byteCode = (int)(Util.convertDataToPrint(self.binData, start,
                                                     length), 16)
            #print('              ', self.byteCodeTable[byteCode])
            byteCodeLength = self.byteCode.execByteCode(
                byteCode, indx, start, prnt)
            indx += byteCodeLength
            start += byteCodeLength * 2

        return start, length
示例#22
0
    def processFieldInfo(self, binData, start, length, exportFieldsCount):
        for item in range((int)(exportFieldsCount, 16)):
            start += length
            length = 2
            token = Util.convertDataToPrint(binData, start, length)
            print('        Field token ', token)

            start += length
            length = 4
            accessFlag = (int)(Util.convertDataToPrint(binData, start, length),
                               16)
            print('        access_flag ', accessFlag)
            if ((accessFlag & 0x0001) == 0x0001):
                print('            access modifier of the  field is - public')
            if ((accessFlag & 0x0004) == 0x0004):
                print(
                    '            access modifier of the  field is - protected')
            if ((accessFlag & 0x0008) == 0x0008):
                print('            access modifier of the  field is - static')
            if ((accessFlag & 0x0010) == 0x0010):
                print('            access modifier of the  field is - final')

            start += length
            length = 4
            nameIndex = Util.convertDataToPrint(binData, start, length)
            print('        name index into the constant_pool table, ' +
                  nameIndex)

            start += length
            length = 4
            descriptorIndex = Util.convertDataToPrint(binData, start, length)
            print('        descriptor index into the constant_pool table, ',
                  descriptorIndex)

            start += length
            length = 4
            attributesCount = Util.convertDataToPrint(binData, start, length)
            print('        number of additional attributes of this field, ',
                  attributesCount)

            start, length = self.processAttributesinfo(binData, start, length,
                                                       attributesCount)
        return start, length
示例#23
0
   def ilookupswitch(self, index, byteCode, start, prnt): 
       Util.printOnConsole(('              '+ self.ByteCodeTable[byteCode]), prnt) 
       start += 2
       length = 4
       
       start += length
       length = 4
       npairs = (int)(Util.convertDataToPrint(self.binData, start, length), 16)
 
       return (5 + (npairs*6))
    def superMethoddRefInfo(self, start, length, prnt):

        start, length = self.classRefProcess(self.binData, start, length, prnt)

        start += length
        length = 2
        token = Util.convertDataToPrint(self.binData, start, length)
        Util.printOnConsole(('               super method token, ' + token),
                            prnt)

        return start, length
    def instanceFieldRefInfo(self, start, length, prnt):

        start, length = self.classRefProcess(self.binData, start, length, prnt)

        start += length
        length = 2
        token = Util.convertDataToPrint(self.binData, start, length)
        Util.printOnConsole(('               instance field token, ' + token),
                            prnt)

        return start, length
示例#26
0
    def processAppletsInfo(self, start, length):        
        start += length 
        length = 2
        aidLength = Util.convertDataToPrint(self.binData, start, length)
        print('        applet aid length, '+"0x"+aidLength)  

        aid=''
        for item in range((int)(aidLength, 16)):
            start += length 
            length = 2
            aid += '0x' + Util.convertDataToPrint(self.binData, start, length) + ':'
            
        print('        applet aid - '+ aid)
        
        start += length 
        length = 4
        offset = Util.convertDataToPrint(self.binData, start, length)
        print('        install method offset into the info item of the Method Component, ', offset)
        
        return start, length
    def processDebugComp(self):
        start = 0
        length = 2
        infTag = Util.convertDataToPrint(self.binData, start, length)
        print('    tag, ' + infTag)

        start += length
        length = 4
        size = Util.convertDataToPrint(self.binData, start, length)
        print('    size, ' + "0x" + size)

        start += length
        length = 4
        string_count = (int)(Util.convertDataToPrint(self.binData, start,
                                                     length), 16)
        print('    string_count, ', string_count)

        index = 0
        while (index < string_count):
            start, length = self.processUTF8Info(start, length)
            index += 1
    def processTypeDescriptorInfo(self, start, length, prnt):
        start += length
        length = 4
        constantPoolCount = (int)(Util.convertDataToPrint(
            self.binData, start, length), 16)
        Util.printOnConsole(
            ('        Number of entries in the constant pool table, ' +
             str(constantPoolCount)), prnt)

        indx = 0
        while (indx < constantPoolCount):
            start += length
            length = 4
            constantPoolType = (int)(Util.convertDataToPrint(
                self.binData, start, length), 16)
            Util.printOnConsole(('        Type of the field or method, ' +
                                 str(constantPoolType)), prnt)
            indx += 1
            Util.printOnConsole((' '), prnt)

        return start, length
示例#29
0
    def processExportComp(self):
        start = 0
        length = 2
        infTag = Util.convertDataToPrint(self.binData, start, length)
        print('    tag, ' + infTag)

        start += length
        length = 4
        size = Util.convertDataToPrint(self.binData, start, length)
        print('    size, ' + "0x" + size)

        start += length
        length = 2
        class_count = (int)(Util.convertDataToPrint(self.binData, start,
                                                    length), 16)
        print('    class_count, ', class_count)

        index = 0
        while (index < class_count):
            start, length = self.processClassExportInfo(start, length)
            index += 1
示例#30
0
    def processAttributesinfo(self, binData, start, length, attributesCount):
        for item in range((int)(attributesCount, 16)):
            start += length
            length = 4
            attributeIndex = Util.convertDataToPrint(binData, start, length)
            print('        attribute index into the constant_pool table,  ',
                  attributeIndex)

            start += length
            length = 8
            attributeLength = Util.convertDataToPrint(binData, start, length)
            print('        attribute_length ', attributeLength)

            start += length
            length = 4
            constantVlaueIndex = Util.convertDataToPrint(
                binData, start, length)
            print('        constantvlaue index into the constant_pool table ',
                  constantVlaueIndex)

        return start, length