1edba94344c710bd689458e1088dc1e487b23870
1 #-------------------------------------------------------------------------------
4 # Eli Bendersky (eliben@gmail.com)
5 # This code is in the public domain
6 #-------------------------------------------------------------------------------
10 from elftools
.elf
.elffile
import ELFFile
13 class TestMap(unittest
.TestCase
):
14 def test_address_offsets(self
):
15 class MockELF(ELFFile
):
16 __init__
= object.__init
__
17 def iter_segments(self
):
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),
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)), ())
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)), ())
47 class TestSectionFilter(unittest
.TestCase
):
49 def test_section_filter(self
):
50 with
open(os
.path
.join('test', 'testfiles_for_unittests',
51 'arm_exidx_test.so'), 'rb') as 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())
58 if __name__
== '__main__':