pykd

Форк
0
/
ehloadtest.py 
57 строк · 1.7 Кб
1
"""Debug events handler: test [un-]load modules notification"""
2

3
import unittest
4
import target
5
import pykd
6
import fnmatch
7
import testutils
8

9
class ModuleLoadHandler(pykd.eventHandler):
10
    """Track load/unload module implementation"""
11
    def __init__(self, moduleMask):
12
        pykd.eventHandler.__init__(self)
13

14
        self.moduleMask = moduleMask.lower()
15

16
        self.wasLoad = 0
17
        self.wasUnload = False
18

19
    def onLoadModule(self, modBase, name):
20
        """Load module handler"""
21

22
        if ( fnmatch.fnmatch(name.lower(), self.moduleMask) ):
23
            self.wasLoad = modBase
24

25
        return pykd.executionStatus.NoChange
26

27
    def onUnloadModule(self, modBase, name):
28
        """Unload module handler"""
29

30
        if ( self.wasLoad and (self.wasLoad == modBase) ):
31
            self.wasUnload = True
32

33
        return pykd.executionStatus.NoChange
34

35
class EhLoadTest(unittest.TestCase):
36
    """Unit tests of [un-]load modules notification"""
37

38
    def testLoadUnload(self):
39
        """Start new process and track loading and unloading modules"""
40
        pykd.startProcess(target.appPath + " loadunloadmodule")
41
        with testutils.ContextCallIt( pykd.killProcess ) as contextCallIt:
42

43
            pykd.go() # skip initail break
44

45
            modLoadHandler = ModuleLoadHandler( "ws2_32*" )
46

47
            pykd.go()
48

49
            #with testutils.ContextCallIt( getattr(modLoadHandler, "reset") ) as resetEventHandler:
50
            #    try:
51
            #        while True:
52
            #            pykd.go()
53
            #    except pykd.WaitEventException:
54
            #        pass
55

56
            self.assertTrue(modLoadHandler.wasLoad)
57
            self.assertTrue(modLoadHandler.wasUnload)
58

59

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.