Пример #1
0
  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
Пример #2
0
    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
Пример #3
0
  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      
Пример #4
0
    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
Пример #5
0
 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))
Пример #6
0
    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))