Ejemplo n.º 1
0
    def test_parse_executable(self):
        fname = os.path.join('test', 'testfiles_for_unittests',
                             'arm_exidx_test.elf')
        with open(fname, 'rb') as f:
            elf = ELFFile(f)
            self.assertTrue(elf.has_ehabi_info())
            infos = elf.get_ehabi_infos()
            self.assertEqual(1, len(infos))
            info = infos[0]

            self.assertIsInstance(info.get_entry(0), EHABIEntry)
            self.assertEqual(info.get_entry(0).function_offset, 0x4f50)
            self.assertEqual(info.get_entry(0).eh_table_offset, 0x22864)
            self.assertEqual(
                info.get_entry(0).bytecode_array,
                [0x97, 0x41, 0x84, 0x0d, 0xb0, 0xb0])

            self.assertIsInstance(info.get_entry(7), CannotUnwindEHABIEntry)
            self.assertEqual(info.get_entry(7).function_offset, 0x5040)

            self.assertIsInstance(info.get_entry(8), GenericEHABIEntry)
            self.assertEqual(info.get_entry(8).personality, 0x15d21)

            self.assertIsInstance(info.get_entry(9), EHABIEntry)
            self.assertEqual(info.get_entry(9).function_offset, 0x5144)
            self.assertEqual(info.get_entry(9).personality, 0)
            self.assertEqual(
                info.get_entry(9).bytecode_array, [0x97, 0x84, 0x08])

            for i in range(info.num_entry()):
                self.assertNotIsInstance(info.get_entry(i), CorruptEHABIEntry)
Ejemplo n.º 2
0
 def test_section_filter(self):
     with open(
             os.path.join('test', 'testfiles_for_unittests',
                          'arm_exidx_test.so'), 'rb') as f:
         elf = ELFFile(f)
         self.assertEqual(len(list(elf.iter_sections())), 26)
         self.assertEqual(len(list(elf.iter_sections('SHT_REL'))), 2)
         self.assertEqual(len(list(elf.iter_sections('SHT_ARM_EXIDX'))), 1)
         self.assertTrue(elf.has_ehabi_info())