#!/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()