1edba94344c710bd689458e1088dc1e487b23870
[pyelftools.git] / test / test_elffile.py
1 #-------------------------------------------------------------------------------
2 # elftools tests
3 #
4 # Eli Bendersky (eliben@gmail.com)
5 # This code is in the public domain
6 #-------------------------------------------------------------------------------
7 import unittest
8 import os
9
10 from elftools.elf.elffile import ELFFile
11
12
13 class TestMap(unittest.TestCase):
14 def test_address_offsets(self):
15 class MockELF(ELFFile):
16 __init__ = object.__init__
17 def iter_segments(self):
18 return iter((
19 dict(p_type='PT_PHDR', p_vaddr=0x10100, p_filesz=0x100, p_offset=0x400),
20 dict(p_type='PT_LOAD', p_vaddr=0x10200, p_filesz=0x200, p_offset=0x100),
21 dict(p_type='PT_LOAD', p_vaddr=0x10100, p_filesz=0x100, p_offset=0x400),
22 ))
23
24 elf = MockELF()
25
26 self.assertEqual(tuple(elf.address_offsets(0x10100)), (0x400,))
27 self.assertEqual(tuple(elf.address_offsets(0x10120)), (0x420,))
28 self.assertEqual(tuple(elf.address_offsets(0x101FF)), (0x4FF,))
29 self.assertEqual(tuple(elf.address_offsets(0x10200)), (0x100,))
30 self.assertEqual(tuple(elf.address_offsets(0x100FF)), ())
31 self.assertEqual(tuple(elf.address_offsets(0x10400)), ())
32
33 self.assertEqual(
34 tuple(elf.address_offsets(0x10100, 0x100)), (0x400,))
35 self.assertEqual(tuple(elf.address_offsets(0x10100, 4)), (0x400,))
36 self.assertEqual(tuple(elf.address_offsets(0x10120, 4)), (0x420,))
37 self.assertEqual(tuple(elf.address_offsets(0x101FC, 4)), (0x4FC,))
38 self.assertEqual(tuple(elf.address_offsets(0x10200, 4)), (0x100,))
39 self.assertEqual(tuple(elf.address_offsets(0x10100, 0x200)), ())
40 self.assertEqual(tuple(elf.address_offsets(0x10000, 0x800)), ())
41 self.assertEqual(tuple(elf.address_offsets(0x100FC, 4)), ())
42 self.assertEqual(tuple(elf.address_offsets(0x100FE, 4)), ())
43 self.assertEqual(tuple(elf.address_offsets(0x101FE, 4)), ())
44 self.assertEqual(tuple(elf.address_offsets(0x103FE, 4)), ())
45 self.assertEqual(tuple(elf.address_offsets(0x10400, 4)), ())
46
47 class TestSectionFilter(unittest.TestCase):
48
49 def test_section_filter(self):
50 with open(os.path.join('test', 'testfiles_for_unittests',
51 'arm_exidx_test.so'), 'rb') as f:
52 elf = ELFFile(f)
53 self.assertEqual(len(list(elf.iter_sections())), 26)
54 self.assertEqual(len(list(elf.iter_sections('SHT_REL'))), 2)
55 self.assertEqual(len(list(elf.iter_sections('SHT_ARM_EXIDX'))), 1)
56 self.assertTrue(elf.has_ehabi_info())
57
58 if __name__ == '__main__':
59 unittest.main()