1import nose
2import cle
3
4from cle.address_translator import AT
5
6
7class MockBackend(cle.Backend):
8    def __init__(self, linked_base, mapped_base, *nargs, **kwargs):
9        super().__init__("/dev/zero", None, *nargs, **kwargs)
10        regions = [
11            cle.Region(0x000000, 0x8048000, 0x1b2d30, 0x1b2d30),
12            cle.Region(0x1b3260, 0x81fc260, 0x002c74, 0x0057bc)
13        ]
14        self.linked_base = linked_base
15        self.mapped_base = mapped_base
16        self.segments = cle.Regions(lst=regions)
17        self.sections = self.segments
18        self.segments._rebase(self.image_base_delta)
19        self._is_mapped = True
20
21
22owner = MockBackend(0x8048000, 0xa000000)
23
24
25def test_lva_mva_translation():
26    nose.tools.assert_equal(AT.from_lva(0x8048000, owner).to_mva(), 0xa000000)
27    nose.tools.assert_equal(AT.from_mva(0xa1b9a1b, owner).to_lva(), 0x8201a1b)
28
29
30def test_va_rva_translation():
31    nose.tools.assert_equal(AT.from_rva(0, owner).to_va(), 0xa000000)
32    nose.tools.assert_equal(AT.from_va(0xa1b9a1b, owner).to_rva(), 0x1b9a1b)
33
34
35def test_valid_va_raw_translations():
36    nose.tools.assert_equal(AT.from_raw(0x1b3260, owner).to_va(), 0xa1b4260)
37    nose.tools.assert_equal(AT.from_va(0xa1b6ed3, owner).to_raw(), 0x1b5ed3)
38
39
40@nose.tools.raises(TypeError)
41def test_invalid_intersegment_raw_va():
42    AT.from_raw(0x1b3000, owner).to_va()
43
44
45def test_invalid_va_raw():
46    nose.tools.assert_equal(AT.from_va(0xa1b6ed4, owner).to_raw(), None)
47
48
49if __name__ == '__main__':
50    list(map(lambda x: x(), filter(lambda o: callable(o) and o.__module__ == '__main__' and o.__name__.startswith("test"), globals().values())))
51