Ejemplo n.º 1
0
    def test_findPattern_recursive_2(self):
        sig = '''P4i4i4u9z8i4I4I4P4i4I4I4P4i4I4I4P4i4I4I4P4i4I4I4P4i4I4I4P4i4I4I4P4i4T5I4P4i4T5I4P4i4I4I4P4i4T5'''\
            '''I4P4i4I4I4P4i4I4I4P4i4I4I4P4i4I4I4P4i4I4I4P4i4I4I4P4i4I4I4P4i4I4I4P4i4I4I4P4i4I4I4P4i4I4I4P4i4I4I4P4i4'''\
            '''I4I4P4i4I4I4P4i4I4I4P4i4I4I4P4i4I4I4P4i4T5I4P4I4i4'''
        sig_res = 'P4 (i4){2} u9z8i4 (I4I4P4i4){7}  (T5I4P4i4){2}  (I4){2} P4i4T5I4P4i4 (I4I4P4i4){17} T5I4P4I4i4'

        self.assertEquals(pattern.findPatternText(sig, 2), sig_res)
Ejemplo n.º 2
0
 def test_findPattern_recursive_3(self):
     sig = '''I4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4z12'''
     sig_res = 'I4 (i4){31} z12'
     # print pattern.findPatternText( sig,2)
     # self.assertRaises ( ValueError, pattern.findPatternText , sig,2) #
     # why ?
     self.assertEquals(pattern.findPatternText(sig, 2), sig_res)
Ejemplo n.º 3
0
 def test_findPattern_recursive_3(self):
     sig = '''I4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4z12'''
     sig_res = 'I4 (i4){31} z12'
     # print pattern.findPatternText( sig,2)
     # self.assertRaises ( ValueError, pattern.findPatternText , sig,2) #
     # why ?
     self.assertEquals(pattern.findPatternText(sig, 2), sig_res)
Ejemplo n.º 4
0
    def test_findPattern_recursive_1(self):
        sig = '''P4I4I4u4z4P4I4u4z4P4I4u4z4P4I4u4z4P4I4u4z4P4I4u4z4P4I4u4z4P4I4u4z4P4I4u4z4P4I4u4z4P4I4u4z'''\
            '''4P4I4u4z4P4I4u4z4P4I4u4z4P4I4u4z4P4I4u4z4P4I4u4z4P4I4u4z4P4I4u4z4P4I4u4z4P4I4u4z4P4I4u172z4I4T'''\
            '''8z4I4z4I4T8z4I4z4I4T8z4I4z4I4T8z4I4z4u4z26336'''
        sig_res = 'P4 (I4){2}  (u4z4P4I4){21} u172z4 (I4T8z4I4z4){4} u4z26336'

        self.assertEquals(pattern.findPatternText(sig, 2), sig_res)
Ejemplo n.º 5
0
    def test_findPattern_recursive_2(self):
        sig = '''P4i4i4u9z8i4I4I4P4i4I4I4P4i4I4I4P4i4I4I4P4i4I4I4P4i4I4I4P4i4I4I4P4i4T5I4P4i4T5I4P4i4I4I4P4i4T5'''\
            '''I4P4i4I4I4P4i4I4I4P4i4I4I4P4i4I4I4P4i4I4I4P4i4I4I4P4i4I4I4P4i4I4I4P4i4I4I4P4i4I4I4P4i4I4I4P4i4I4I4P4i4'''\
            '''I4I4P4i4I4I4P4i4I4I4P4i4I4I4P4i4I4I4P4i4T5I4P4I4i4'''
        sig_res = 'P4 (i4){2} u9z8i4 (I4I4P4i4){7}  (T5I4P4i4){2}  (I4){2} P4i4T5I4P4i4 (I4I4P4i4){17} T5I4P4I4i4'

        self.assertEquals(pattern.findPatternText(sig, 2), sig_res)
Ejemplo n.º 6
0
    def test_findPattern_recursive_1(self):
        sig = '''P4I4I4u4z4P4I4u4z4P4I4u4z4P4I4u4z4P4I4u4z4P4I4u4z4P4I4u4z4P4I4u4z4P4I4u4z4P4I4u4z4P4I4u4z'''\
            '''4P4I4u4z4P4I4u4z4P4I4u4z4P4I4u4z4P4I4u4z4P4I4u4z4P4I4u4z4P4I4u4z4P4I4u4z4P4I4u4z4P4I4u172z4I4T'''\
            '''8z4I4z4I4T8z4I4z4I4T8z4I4z4I4T8z4I4z4u4z26336'''
        sig_res = 'P4 (I4){2}  (u4z4P4I4){21} u172z4 (I4T8z4I4z4){4} u4z26336'

        self.assertEquals(pattern.findPatternText(sig, 2), sig_res)
Ejemplo n.º 7
0
    def reverse_record(self, _context, _record):
        if not _record.resolvedPointers:
            raise ValueError('I should be resolved')
        _record._dirty = True
        _record._fields.sort()
        myfields = []

        signature = _record.get_type_signature()
        pencoder = pattern.PatternEncoder(signature, minGroupSize=2)
        patterns = pencoder.makePattern()

        txt = _record.get_type_signature(text=True)
        p = pattern.findPatternText(txt, 1, 2)

        log.debug('substruct typeSig: %s' % txt)
        log.debug('substruct findPatterntext: %s' % p)
        log.debug('substruct came up with pattern %s' % patterns)

        # pattern is made on FieldType,
        # so we need to dequeue _record.fields at the same time to enqueue in
        # myfields
        for nb, fieldTypes in patterns:
            if nb == 1:
                field = _record._fields.pop(0)
                myfields.append(field)  # single el
                # log.debug('simple field:%s '%(field) )
            elif len(fieldTypes) > 1:  # array of subtructure DEBUG XXX TODO
                log.debug('fieldTypes:%s' % fieldTypes)
                log.debug('substructure with sig %s',
                          ''.join([ft.sig[0] for ft in fieldTypes]))
                myelements = []
                for i in range(nb):
                    fields = [
                        _record._fields.pop(0) for i in range(len(fieldTypes))
                    ]  # nb-1 left
                    # otherFields = [ _record.fields.pop(0) for i in range((nb-1)*len(fieldTypesAndSizes)) ]
                    # need global ref to compare substructure signature to
                    # other anonstructure
                    firstField = fieldtypes.RecordField(
                        _record, fields[0].offset, 'unk', 'typename', fields)
                    myelements.append(firstField)
                array = fieldtypes.ArrayField(myelements)
                myfields.append(array)
                # log.debug('array of structure %s'%(array))
            # make array of elements obase on same base type
            elif len(fieldTypes) == 1:
                log.debug('found array of %s',
                          _record._fields[0].typename.basename)
                fields = [_record._fields.pop(0) for i in range(nb)]
                array = fieldtypes.ArrayField(fields)
                myfields.append(array)
                # log.debug('array of elements %s'%(array))
            else:  # TODO DEBUG internal struct
                raise ValueError('fields patterns len is incorrect %d' %
                                 (len(fieldTypes)))

        log.debug('done with findSubstructure')
        _record._fields = myfields
        # print 'final', _record.fields
        return
Ejemplo n.º 8
0
    def reverse_record(self, _context, _record):
        if not _record.resolvedPointers:
            raise ValueError('I should be resolved')
        _record._dirty = True
        _record._fields.sort()
        myfields = []

        signature = _record.get_type_signature()
        pencoder = pattern.PatternEncoder(signature, minGroupSize=2)
        patterns = pencoder.makePattern()

        txt = _record.get_type_signature(text=True)
        p = pattern.findPatternText(txt, 1, 2)

        log.debug('substruct typeSig: %s' % txt)
        log.debug('substruct findPatterntext: %s' % p)
        log.debug('substruct came up with pattern %s' % patterns)

        # pattern is made on FieldType,
        # so we need to dequeue _record.fields at the same time to enqueue in
        # myfields
        for nb, fieldTypes in patterns:
            if nb == 1:
                field = _record._fields.pop(0)
                myfields.append(field)  # single el
                # log.debug('simple field:%s '%(field) )
            elif len(fieldTypes) > 1:  # array of subtructure DEBUG XXX TODO
                log.debug('fieldTypes:%s' % fieldTypes)
                log.debug('substructure with sig %s', ''.join([ft.sig[0] for ft in fieldTypes]))
                myelements = []
                for i in range(nb):
                    fields = [_record._fields.pop(0) for i in range(len(fieldTypes))]  # nb-1 left
                    # otherFields = [ _record.fields.pop(0) for i in range((nb-1)*len(fieldTypesAndSizes)) ]
                    # need global ref to compare substructure signature to
                    # other anonstructure
                    firstField = fieldtypes.RecordField(_record, fields[0].offset, 'unk', 'typename', fields)
                    myelements.append(firstField)
                array = fieldtypes.ArrayField(myelements)
                myfields.append(array)
                # log.debug('array of structure %s'%(array))
            # make array of elements obase on same base type
            elif len(fieldTypes) == 1:
                log.debug('found array of %s', _record._fields[0].typename.basename)
                fields = [_record._fields.pop(0) for i in range(nb)]
                array = fieldtypes.ArrayField(fields)
                myfields.append(array)
                # log.debug('array of elements %s'%(array))
            else:  # TODO DEBUG internal struct
                raise ValueError(
                    'fields patterns len is incorrect %d' %
                    (len(fieldTypes)))

        log.debug('done with findSubstructure')
        _record._fields = myfields
        # print 'final', _record.fields
        return
Ejemplo n.º 9
0
 def test_findPattern_recursive_7(self):
     sig = '''aaaaa1111bbbccda2a2a2a2a2b1cb1cb1cb1cabcdabcdabcdabcdpooiiiuuuuyyyyy'''
     sig_res = ' (a){5}  (1){4}  (b){3} ccd (a2){5}  (b1c){4}  (abcd){4} poo (i){3}  (u){4}  (y){5} '
     self.assertEquals(pattern.findPatternText(sig, 1, 3), sig_res)
Ejemplo n.º 10
0
 def test_findPattern_recursive_5(self):
     sig = '''AAABABABABBAAABBBBABACBCBCBCBABCBABABC'''
     sig_res = ' (A){2}  (AB){4} B (A){3}  (B){3}  (BA){2}  (CB){3}  (CBAB){2} ABC'
     self.assertEquals(pattern.findPatternText(sig, 1), sig_res)
Ejemplo n.º 11
0
 def test_findPattern_recursive_4(self):
     sig = '''123321444567444567444567444567111123'''
     sig_res = '123321 (444567){4} 111123'
     self.assertEquals(pattern.findPatternText(sig, 3), sig_res)
Ejemplo n.º 12
0
 def test_findPattern_recursive_8b(self):
     sig = '''I4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4z1'''
     sig_res = 'I4 (i4){31} z1'
     self.assertEquals(pattern.findPatternText(sig, 2, 4), sig_res)
Ejemplo n.º 13
0
 def test_findPattern_recursive_7(self):
     sig = '''aaaaa1111bbbccda2a2a2a2a2b1cb1cb1cb1cabcdabcdabcdabcdpooiiiuuuuyyyyy'''
     sig_res = ' (a){5}  (1){4}  (b){3} ccd (a2){5}  (b1c){4}  (abcd){4} poo (i){3}  (u){4}  (y){5} '
     self.assertEquals(pattern.findPatternText(sig, 1, 3), sig_res)
Ejemplo n.º 14
0
 def test_findPattern_recursive_5(self):
     sig = '''AAABABABABBAAABBBBABACBCBCBCBABCBABABC'''
     sig_res = ' (A){2}  (AB){4} B (A){3}  (B){3}  (BA){2}  (CB){3}  (CBAB){2} ABC'
     self.assertEquals(pattern.findPatternText(sig, 1), sig_res)
Ejemplo n.º 15
0
 def test_findPattern_recursive_4(self):
     sig = '''123321444567444567444567444567111123'''
     sig_res = '123321 (444567){4} 111123'
     self.assertEquals(pattern.findPatternText(sig, 3), sig_res)
Ejemplo n.º 16
0
 def test_findPattern_recursive_8b(self):
     sig = '''I4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4i4z1'''
     sig_res = 'I4 (i4){31} z1'
     self.assertEquals(pattern.findPatternText(sig, 2, 4), sig_res)
Ejemplo n.º 17
0
 def test_findPattern_recursive_9(self):
     sig = '''aaaaa1111bbbccda2a2a2a2a2b1cb1cb1cb1cabcdabcdabcdabcdpooiiiuuuuyyyyy'''
     sig_res = ' (a){5} 1111bbbccd (a2){5} b1cb1cb1cb1cabcdabcdabcdabcdpooiiiuuuu (y){5} '
     self.assertEquals(pattern.findPatternText(sig, 1, 5), sig_res)
Ejemplo n.º 18
0
 def test_findPattern_recursive_9(self):
     sig = '''aaaaa1111bbbccda2a2a2a2a2b1cb1cb1cb1cabcdabcdabcdabcdpooiiiuuuuyyyyy'''
     sig_res = ' (a){5} 1111bbbccd (a2){5} b1cb1cb1cb1cabcdabcdabcdabcdpooiiiuuuu (y){5} '
     self.assertEquals(pattern.findPatternText(sig, 1, 5), sig_res)