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)
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())