summaryrefslogtreecommitdiff
path: root/tests/format/elf/overlapping_areas.py
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2017-05-11 19:09:07 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2017-05-11 19:09:07 (GMT)
commit8ee7fc5db965adaa835ca87bb3d2e2d43e52fbbb (patch)
treec4b89d08fe59b5970626fc22a868ff1a0f09af16 /tests/format/elf/overlapping_areas.py
parent81aec19816e053d37cea882544ca35d2203a3c5b (diff)
Handled preloaded instructions located in two cut areas (ELF overlapping).
Diffstat (limited to 'tests/format/elf/overlapping_areas.py')
-rw-r--r--tests/format/elf/overlapping_areas.py62
1 files changed, 62 insertions, 0 deletions
diff --git a/tests/format/elf/overlapping_areas.py b/tests/format/elf/overlapping_areas.py
new file mode 100644
index 0000000..4c78625
--- /dev/null
+++ b/tests/format/elf/overlapping_areas.py
@@ -0,0 +1,62 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+
+# Il arrive que les segments englobent partiellement des sections.
+#
+# Cela peut être problématique si une section contient une chaîne de taille
+# n qui se retrouve à cheval sur deux zones (la section des chaînes découpée
+# en deux par exemple).
+#
+# Au moment d'associer l'instruction chargée à la zone de départ, cette
+# dernière n'est pas assez grande car elle ne représente pas la section
+# en entier.
+
+
+from chrysacase import ChrysalideTestCase
+from pychrysalide.analysis import LoadedBinary
+from pychrysalide.analysis.contents import FileContent
+from threading import Event
+import os
+import sys
+
+
+class TestOverlappingAreas(ChrysalideTestCase):
+ """TestCase for BSS segment overlapping string section."""
+
+ @classmethod
+ def setUpClass(cls):
+
+ super(TestOverlappingAreas, cls).setUpClass()
+
+ cls.log('Compile binary "overlapping_areas" if needed...')
+
+ fullname = sys.modules[cls.__module__].__file__
+ dirpath = os.path.dirname(fullname)
+
+ os.system('make -C %s overlapping_areas 2>&1 > /dev/null' % dirpath)
+
+
+ def testOOBSectionName(self):
+ """Avoid crashing because of overlapping binary areas."""
+
+ fullname = sys.modules[self.__class__.__module__].__file__
+ filename = os.path.basename(fullname)
+
+ baselen = len(fullname) - len(filename)
+
+ cnt = FileContent(fullname[:baselen] + 'overlapping_areas')
+ self.assertIsNotNone(cnt)
+
+ binary = LoadedBinary(cnt)
+
+ def disass_done(binary):
+ worker.set()
+
+ binary.connect('disassembly-done', disass_done)
+
+ worker = Event()
+
+ binary.analyse()
+
+ worker.wait()