def test_ref_unicity_2(self): model.keepRef(1, int, 0xcafecafe) model.keepRef(2, int, 0xcafecafe) model.keepRef(3, int, 0xcafecafe) me = model.getRefByAddr( 0xcafecafe ) self.assertEquals( len(me), 1) model.keepRef('4', str, 0xcafecafe) me = model.getRefByAddr( 0xcafecafe ) self.assertEquals( len(me), 2) return
def test_ref_unicity_2(self): model.keepRef(1, int, 0xcafecafe) model.keepRef(2, int, 0xcafecafe) model.keepRef(3, int, 0xcafecafe) me = model.getRefByAddr(0xcafecafe) self.assertEquals(len(me), 1) model.keepRef('4', str, 0xcafecafe) me = model.getRefByAddr(0xcafecafe) self.assertEquals(len(me), 2) return
def test_keepRef(self): self.assertNotEqual( self.mappings, None ) for fname, ftype in self.heap_obj.getFields(): attr = getattr(self.heap_obj, fname) if isCStringPointer(ftype): # ignore that - attr_addr = getaddress(attr.ptr) continue elif isPointerType(ftype): attr_addr = getaddress(attr) else: continue if attr_addr == 0: continue self.assertTrue( utils.is_valid_address_value(attr_addr, self.mappings), '%s: 0x%x is not valid'%(fname, attr_addr)) # the book should register struct type, not pointer to strut type attr_type = model.get_subtype(ftype) # look in the books saved = model.getRefByAddr( attr_addr ) _class, _addr, _obj = saved[0] self.assertEquals( attr_addr, _addr) self.assertEquals( attr_type, _class, '%s != %s' %(type(ftype), type(_class))) self.assertTrue( model.hasRef( model.get_subtype(ftype), attr_addr)) return
def test_keepRef(self): self.assertNotEqual(self.mappings, None) for fname, ftype in self.heap_obj.getFields(): attr = getattr(self.heap_obj, fname) if isCStringPointer(ftype): # ignore that - attr_addr = getaddress(attr.ptr) continue elif isPointerType(ftype): attr_addr = getaddress(attr) else: continue if attr_addr == 0: continue self.assertTrue( utils.is_valid_address_value(attr_addr, self.mappings), '%s: 0x%x is not valid' % (fname, attr_addr)) # the book should register struct type, not pointer to strut type attr_type = model.get_subtype(ftype) # look in the books saved = model.getRefByAddr(attr_addr) _class, _addr, _obj = saved[0] self.assertEquals(attr_addr, _addr) self.assertEquals(attr_type, _class, '%s != %s' % (type(ftype), type(_class))) self.assertTrue(model.hasRef(model.get_subtype(ftype), attr_addr)) return
def test_ref_unicity(self): ''' The book should contains only unique values tuples. ''' self.assertNotEqual( self.mappings, None ) fails = dict() for (typ,addr),obj in model.getRefs(): me = model.getRefByAddr( addr ) if len(me) > 1: if addr not in fails: fails[addr] = list() else: continue for _typ, _addr, _obj in me: fails[addr].append( _typ ) for addr, types in fails.items(): log.debug('\n\n**** %0.8x '%(addr)) log.debug('\n'.join([str(t) for t in types])) addresses = [ addr for (typ,addr),obj in model.getRefs()] s_addrs = set(addresses) self.assertEquals( len(addresses), len(s_addrs))
def test_ref_unicity(self): ''' The book should contains only unique values tuples. ''' self.assertNotEqual(self.mappings, None) fails = dict() for (typ, addr), obj in model.getRefs(): me = model.getRefByAddr(addr) if len(me) > 1: if addr not in fails: fails[addr] = list() else: continue for _typ, _addr, _obj in me: fails[addr].append(_typ) for addr, types in fails.items(): log.debug('\n\n**** %0.8x ' % (addr)) log.debug('\n'.join([str(t) for t in types])) addresses = [addr for (typ, addr), obj in model.getRefs()] s_addrs = set(addresses) self.assertEquals(len(addresses), len(s_addrs))