From 3ab64bdc855fb493eab402b5710419dde97d54b3 Mon Sep 17 00:00:00 2001
From: ussrhero <ussrhero@outlook.com>
Date: Sat, 1 Jun 2019 10:33:17 +0300
Subject: [PATCH] added : module.hasSymbol method (check if a module has the
 specified symbol)

---
 pykd/pymod.cpp             |  2 ++
 test/scripts/moduletest.py | 11 +++++------
 2 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/pykd/pymod.cpp b/pykd/pymod.cpp
index eaab63b..ccab5af 100644
--- a/pykd/pymod.cpp
+++ b/pykd/pymod.cpp
@@ -886,6 +886,8 @@ void pykd_init()
             "Return tuple of the module's file version")
         .def("getFixedFileInfo", ModuleAdapter::getFixedFileInfo,
             "Return FixedFileInfo" )
+        .def("hasSymbol", ModuleAdapter::isContainedSymbol,
+            "Check if module has the specified symbol")
         .def("__getattr__", ModuleAdapter::getAttrByName,
             "Return symbol offset or type as attribute" )
         .def("__getitem__", ModuleAdapter::getItemByKey,
diff --git a/test/scripts/moduletest.py b/test/scripts/moduletest.py
index 7e35ca7..84c8b69 100644
--- a/test/scripts/moduletest.py
+++ b/test/scripts/moduletest.py
@@ -145,12 +145,6 @@ class ModuleTest( unittest.TestCase ):
         self.assertFalse("NotExist" in target.module)
         self.assertRaises(Exception, lambda md : 2 in md, target.module)
 
-    def testHasAttr(self):
-        self.assertTrue(hasattr(target.module, "voidPtr"))
-        self.assertTrue(hasattr(target.module, "structTest"))
-        self.assertFalse(hasattr(target.module, "NotExist"))
-        self.assertRaises(Exception, lambda md : hasattr(2, target.module), target.module)
-
     def testGetByKey(self):
         self.assertFalse(None == target.module["voidPtr"])
         self.assertFalse(None == target.module["structTest"] )
@@ -159,6 +153,11 @@ class ModuleTest( unittest.TestCase ):
     def testEvalInModuleScope(self):
         self.assertEqual( target.module.rva('voidPtr'), eval("voidPtr - %#x" % target.module.begin(), globals(), target.module) )
 
+    def testHasSymbol(self):
+        self.assertTrue(target.module.hasSymbol("voidPtr"))
+        self.assertTrue(target.module.hasSymbol("structTest"))
+        self.assertFalse(target.module.hasSymbol("notExists"))
+
     def testPrint(self):
         modAsStr = str(target.module)