diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2019-01-08 22:29:47 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2019-01-08 22:29:47 (GMT) |
commit | 2ed3c9274c8dafb660bc25743a1aac7c72c12965 (patch) | |
tree | e3f20c5ebfe947163442144aba29a1d62462ac7d /tests/analysis/disass/armv7.py | |
parent | 8f77fd4f0a73a92087b185af0b45d70607268107 (diff) |
Marked the ARMv7 branch instructions with the LR register as return points.
Diffstat (limited to 'tests/analysis/disass/armv7.py')
-rw-r--r-- | tests/analysis/disass/armv7.py | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/tests/analysis/disass/armv7.py b/tests/analysis/disass/armv7.py new file mode 100644 index 0000000..4befdf6 --- /dev/null +++ b/tests/analysis/disass/armv7.py @@ -0,0 +1,69 @@ +#!/usr/bin/python3 +# -*- coding: utf-8 -*- + + +# S'assure du bon fonctionnement des blocs basiques + + +from chrysacase import ChrysalideTestCase +from pychrysalide.analysis.contents import FileContent +from pychrysalide.analysis import LoadedBinary +from pychrysalide.format.elf import ElfFormat +import os +import sys + + +class TestARMv7(ChrysalideTestCase): + """TestCase for ARMv7.""" + + @classmethod + def setUpClass(cls): + + super(TestARMv7, cls).setUpClass() + + cls.log('Compile binary "endofname" if needed...') + + fullname = sys.modules[cls.__module__].__file__ + dirpath = os.path.dirname(fullname) + + os.system('make -C %s endofname > /dev/null 2>&1' % dirpath) + + + @classmethod + def tearDownClass(cls): + + super(TestARMv7, cls).tearDownClass() + + cls.log('Delete built binaries...') + + fullname = sys.modules[cls.__module__].__file__ + dirpath = os.path.dirname(fullname) + + os.system('make -C %s clean > /dev/null 2>&1' % dirpath) + + + def testBranchLR(self): + """Ensure some bx instructions are marked as return points.""" + + fullname = sys.modules[self.__class__.__module__].__file__ + filename = os.path.basename(fullname) + + baselen = len(fullname) - len(filename) + + cnt = FileContent(fullname[:baselen] + 'endofname') + self.assertIsNotNone(cnt) + + fmt = ElfFormat(cnt) + self.assertIsNotNone(fmt) + + binary = LoadedBinary(fmt) + self.assertIsNotNone(binary) + + binary.analyze_and_wait() + + sym = fmt.find_symbol_by_label('endofname') + self.assertIsNotNone(sym) + + block = list(sym.basic_blocks)[1] + + self.assertEqual(len(block.boundaries[1].destinations), 0) |