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
, type=None):
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),
25 dict(p_type
='PT_PHDR', p_vaddr
=0x10100, p_filesz
=0x100, p_offset
=0x400),
26 dict(p_type
='PT_LOAD', p_vaddr
=0x10200, p_filesz
=0x200, p_offset
=0x100),
27 dict(p_type
='PT_LOAD', p_vaddr
=0x10100, p_filesz
=0x100, p_offset
=0x400),
32 self
.assertEqual(tuple(elf
.address_offsets(0x10100)), (0x400,))
33 self
.assertEqual(tuple(elf
.address_offsets(0x10120)), (0x420,))
34 self
.assertEqual(tuple(elf
.address_offsets(0x101FF)), (0x4FF,))
35 self
.assertEqual(tuple(elf
.address_offsets(0x10200)), (0x100,))
36 self
.assertEqual(tuple(elf
.address_offsets(0x100FF)), ())
37 self
.assertEqual(tuple(elf
.address_offsets(0x10400)), ())
40 tuple(elf
.address_offsets(0x10100, 0x100)), (0x400,))
41 self
.assertEqual(tuple(elf
.address_offsets(0x10100, 4)), (0x400,))
42 self
.assertEqual(tuple(elf
.address_offsets(0x10120, 4)), (0x420,))
43 self
.assertEqual(tuple(elf
.address_offsets(0x101FC, 4)), (0x4FC,))
44 self
.assertEqual(tuple(elf
.address_offsets(0x10200, 4)), (0x100,))
45 self
.assertEqual(tuple(elf
.address_offsets(0x10100, 0x200)), ())
46 self
.assertEqual(tuple(elf
.address_offsets(0x10000, 0x800)), ())
47 self
.assertEqual(tuple(elf
.address_offsets(0x100FC, 4)), ())
48 self
.assertEqual(tuple(elf
.address_offsets(0x100FE, 4)), ())
49 self
.assertEqual(tuple(elf
.address_offsets(0x101FE, 4)), ())
50 self
.assertEqual(tuple(elf
.address_offsets(0x103FE, 4)), ())
51 self
.assertEqual(tuple(elf
.address_offsets(0x10400, 4)), ())
53 class TestSectionFilter(unittest
.TestCase
):
55 def test_section_filter(self
):
56 with
open(os
.path
.join('test', 'testfiles_for_unittests',
57 'arm_exidx_test.so'), 'rb') as f
:
59 self
.assertEqual(len(list(elf
.iter_sections())), 26)
60 self
.assertEqual(len(list(elf
.iter_sections('SHT_REL'))), 2)
61 self
.assertEqual(len(list(elf
.iter_sections('SHT_ARM_EXIDX'))), 1)
62 self
.assertTrue(elf
.has_ehabi_info())
64 if __name__
== '__main__':