1import nose 2import cle 3import os 4 5 6class MockBackend(cle.backends.Backend): 7 def __init__(self, linked_base, size, **kwargs): 8 super().__init__('/dev/zero', None, **kwargs) 9 self.mapped_base = self.linked_base = linked_base 10 self.size = size 11 self.pic = True 12 13 @property 14 def max_addr(self): 15 return self.mapped_base + self.size - 1 16 17 18def test_overlap(): 19 filename = os.path.join(os.path.dirname(os.path.realpath(__file__)), '../../binaries/tests/i386/manysum') 20 ld = cle.Loader(filename, auto_load_libs=False) 21 nose.tools.assert_equal(ld.main_object.linked_base, 0x8048000) 22 nose.tools.assert_equal(ld.main_object.min_addr, 0x8048000) 23 24 obj1 = MockBackend(0x8047000, 0x2000, arch=ld.main_object.arch) 25 obj2 = MockBackend(0x8047000, 0x1000, arch=ld.main_object.arch) 26 27 ld.dynamic_load(obj1) 28 ld.dynamic_load(obj2) 29 30 nose.tools.assert_equal(obj2.mapped_base, 0x8047000) 31 nose.tools.assert_greater(obj1.mapped_base, 0x8048000) 32 33if __name__ == '__main__': 34 test_overlap() 35