summaryrefslogtreecommitdiff
path: root/tests/analysis/disass/links.py
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2019-02-19 18:34:33 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2019-02-19 18:34:33 (GMT)
commitd992b4ae5a35954d4fda460735f6dc861ae7bd26 (patch)
treee37e3f43cbdd2daf5751512e9197f88ec8081957 /tests/analysis/disass/links.py
parent8ff2fec3c71e156391304361631e0a306a4a9afd (diff)
Ensured all natural links are well created.
Diffstat (limited to 'tests/analysis/disass/links.py')
-rw-r--r--tests/analysis/disass/links.py72
1 files changed, 72 insertions, 0 deletions
diff --git a/tests/analysis/disass/links.py b/tests/analysis/disass/links.py
new file mode 100644
index 0000000..e0c9ec9
--- /dev/null
+++ b/tests/analysis/disass/links.py
@@ -0,0 +1,72 @@
+#!/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.arch import ArchInstruction
+from pychrysalide.format.elf import ElfFormat
+import os
+import sys
+
+
+class TestDisassLinks(ChrysalideTestCase):
+ """TestCase for ARMv7."""
+
+ @classmethod
+ def setUpClass(cls):
+
+ super(TestDisassLinks, cls).setUpClass()
+
+ cls.log('Compile binary "h1b" if needed...')
+
+ fullname = sys.modules[cls.__module__].__file__
+ dirpath = os.path.dirname(fullname)
+
+ os.system('make -C %s h1b > /dev/null 2>&1' % dirpath)
+
+
+ @classmethod
+ def tearDownClass(cls):
+
+ super(TestDisassLinks, 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 testNaturalLinks(self):
+ """Ensure all natural links are well created."""
+
+ fullname = sys.modules[self.__class__.__module__].__file__
+ filename = os.path.basename(fullname)
+
+ baselen = len(fullname) - len(filename)
+
+ cnt = FileContent(fullname[:baselen] + 'h1b')
+ self.assertIsNotNone(cnt)
+
+ fmt = ElfFormat(cnt)
+ self.assertIsNotNone(fmt)
+
+ binary = LoadedBinary(fmt)
+ self.assertIsNotNone(binary)
+
+ binary.analyze_and_wait()
+
+ nat_count = 0
+
+ for ins in binary.processor.instrs:
+ for _, dt in ins.destinations:
+ if dt == ArchInstruction.ILT_EXEC_FLOW:
+ nat_count += 1
+
+ self.assertEqual(nat_count, 3)