def test_rfind_utf16(self): #print len(self.test1) self.assertEquals( 0 , re_string.rfind_utf16(self.test1, 0, len(self.test1) )) self.assertEquals( 0 , re_string.rfind_utf16(self.test2, 0, len(self.test2) )) self.assertEquals( 0 , re_string.rfind_utf16(self.test3, 0, len(self.test3) )) self.assertEquals( -1 , re_string.rfind_utf16(self.test4, 0, len(self.test4) )) self.assertEquals( -1 , re_string.rfind_utf16(self.test5, 0, len(self.test5) )) self.assertEquals( -1 , re_string.rfind_utf16(self.test6, 0, len(self.test6) )) self.assertEquals( -1 , re_string.rfind_utf16(self.test7, 0, len(self.test7) )) # truncated last field #print repr(self.test8[120:]) self.assertEquals( 122 , re_string.rfind_utf16(self.test8, 0, len(self.test8) )) # find start with limited size self.assertEquals( 0 , re_string.rfind_utf16(self.test8, 0, 64 )) # middle field ( 12+64 ) self.assertEquals( 12 , re_string.rfind_utf16(self.test8, 64, 58 ))
def make_fields(self, structure, offset, size): assert( offset%Config.WORDSIZE == 0 ) #vaddr and offset should be aligned #log.debug('checking String') fields = [] bytes = structure.bytes while size > Config.WORDSIZE: #print 're_string.rfind_utf16(bytes, %d, %d)'%(offset,size) index = re_string.rfind_utf16(bytes, offset, size) if index > -1: f = Field(structure, offset+index, FieldType.STRING16, size-index, False) #print repr(structure.bytes[f.offset:f.offset+f.size]) fields.append(f) size = index # reduce unknown field in prefix else: size -= Config.WORDSIZE # reduce unkown field # look in head return fields
def make_fields(self, _record, offset, size): assert(offset % self._word_size == 0) # vaddr and offset should be aligned # log.debug('checking String') fields = [] _bytes = _record.bytes while size > self._word_size: # print 're_string.rfind_utf16(bytes, %d, %d)'%(offset,size) # we force aligned results only. otherwise er have overlaps index = re_string.rfind_utf16(_bytes, offset, size, False, self._word_size) if index > -1: _offset = offset + index f = fieldtypes.Field('utf16_%d' % _offset, _offset, fieldtypes.STRING16, size - index, False) # print repr(structure.bytes[f.offset:f.offset+f.size]) fields.append(f) size = index # reduce unknown field in prefix else: size -= self._word_size # reduce unkown field # look in head return fields
def make_fields(self, _record, offset, size): assert (offset % self._word_size == 0 ) # vaddr and offset should be aligned # log.debug('checking String') fields = [] _bytes = _record.bytes while size > self._word_size: # print 're_string.rfind_utf16(bytes, %d, %d)'%(offset,size) # we force aligned results only. otherwise er have overlaps index = re_string.rfind_utf16(_bytes, offset, size, False, self._word_size) if index > -1: _offset = offset + index f = fieldtypes.Field('utf16_%d' % _offset, _offset, fieldtypes.STRING16, size - index, False) # print repr(structure.bytes[f.offset:f.offset+f.size]) fields.append(f) size = index # reduce unknown field in prefix else: size -= self._word_size # reduce unkown field # look in head return fields
def test_rfind_utf16(self): # print len(self.test1) self.assertEquals(0, re_string.rfind_utf16(self.test1, 0, len(self.test1), True, 4)) self.assertEquals(0, re_string.rfind_utf16(self.test2, 0, len(self.test2), True, 4)) self.assertEquals(0, re_string.rfind_utf16(self.test3, 0, len(self.test3), True, 4)) self.assertEquals(-1, re_string.rfind_utf16(self.test4, 0, len(self.test4), True, 4)) self.assertEquals(-1, re_string.rfind_utf16(self.test5, 0, len(self.test5), True, 4)) self.assertEquals(-1, re_string.rfind_utf16(self.test6, 0, len(self.test6), True, 4)) self.assertEquals(-1, re_string.rfind_utf16(self.test7, 0, len(self.test7), True, 4)) # truncated last field # print repr(self.test8[120:]) self.assertEquals(122, re_string.rfind_utf16(self.test8, 0, len(self.test8), False, 4)) # find start with limited size self.assertEquals(0, re_string.rfind_utf16(self.test8, 0, 64, True, 4)) # middle field ( 12+64 ) self.assertEquals(12, re_string.rfind_utf16(self.test8, 64, 58, True, 4)) # non aligned middle field ? # TODO self.assertEquals( 4, re_string.rfind_utf16(self.test9, 0, # len(self.test9) )) ## # self.assertEqual(0, re_string.rfind_utf16(self.test11, 0, 48, False, 4)) print re_string.rfind_utf16(self.test11, 0, 44, False, 4)