From 2f192bbd01522482f1b33cad61caf50faa23e48d Mon Sep 17 00:00:00 2001 From: "SND\\kernelnet_cp" Date: Wed, 16 Mar 2016 08:18:26 +0000 Subject: [PATCH] [0.3.x] reworked : test scripts python3 compatible git-svn-id: https://pykd.svn.codeplex.com/svn@90961 9b283d60-5439-405e-af05-b73fd8c4d996 --- pykd/pykdver.h | 4 ++-- pykd/pymod.cpp | 5 +++++ pykd/pytypeinfo.h | 4 ++++ test/scripts/breakpoint.py | 2 +- test/scripts/intbase.py | 2 +- test/scripts/memtest.py | 18 +++++++++--------- test/scripts/moduletest.py | 14 ++++++++++++++ test/scripts/mspdbtest.py | 6 +++--- test/scripts/pykdtest.py | 15 +++++++++------ test/scripts/stacktest.py | 5 ++--- test/scripts/targetprocess.py | 6 +++--- test/scripts/typedvar.py | 15 +++++++++++++++ test/scripts/typeinfo.py | 3 +++ 13 files changed, 71 insertions(+), 28 deletions(-) diff --git a/pykd/pykdver.h b/pykd/pykdver.h index 58c13a8..7c6a80f 100644 --- a/pykd/pykdver.h +++ b/pykd/pykdver.h @@ -1,8 +1,8 @@ #define PYKD_VERSION_MAJOR 0 #define PYKD_VERSION_MINOR 3 -#define PYKD_VERSION_SUBVERSION 0 -#define PYKD_VERSION_BUILDNO 38 +#define PYKD_VERSION_SUBVERSION 1 +#define PYKD_VERSION_BUILDNO 1 #define __VER_STR2__(x) #x #define __VER_STR1__(x) __VER_STR2__(x) diff --git a/pykd/pymod.cpp b/pykd/pymod.cpp index 15c9921..9180b79 100644 --- a/pykd/pymod.cpp +++ b/pykd/pymod.cpp @@ -780,6 +780,11 @@ BOOST_PYTHON_MODULE( pykd ) .def( "__len__", TypeInfoAdapter::getElementCount ) .def( "__getitem__", TypeInfoAdapter::getElementByIndex ) .def( "__dir__", TypeInfoAdapter::getElementDir ) +#if PY_VERSION_HEX >= 0x03000000 + .def("__bool__", TypeInfoAdapter::isZero ) +#else + .def("__iszero__", TypeInfoAdapter::isZero ) +#endif ; python::class_, boost::noncopyable >("typedVar", diff --git a/pykd/pytypeinfo.h b/pykd/pytypeinfo.h index d8fc91b..33d82dd 100644 --- a/pykd/pytypeinfo.h +++ b/pykd/pytypeinfo.h @@ -228,6 +228,10 @@ struct TypeInfoAdapter : public kdlib::TypeInfo { static python::list getElementDir(kdlib::TypeInfo &typeInfo); + static bool isZero(kdlib::TypeInfo &typeInfo) { + return false; + } + }; struct BaseTypesEnum { diff --git a/test/scripts/breakpoint.py b/test/scripts/breakpoint.py index 7023cdf..4939210 100644 --- a/test/scripts/breakpoint.py +++ b/test/scripts/breakpoint.py @@ -145,7 +145,7 @@ class BreakpointTest( unittest.TestCase ): b3 = pykd.setBp( self.targetModule.CdeclFunc + 2) self.assertEqual(3, pykd.getNumberBreakpoints()); - bpLst = [pykd.getBp(i) for i in xrange(3)] + bpLst = [pykd.getBp(i) for i in range(3)] self.assertEqual(3, len(bpLst)) map( lambda bp: bp.remove(), bpLst) self.assertEqual(0, pykd.getNumberBreakpoints()); diff --git a/test/scripts/intbase.py b/test/scripts/intbase.py index 42390b7..84e6eba 100644 --- a/test/scripts/intbase.py +++ b/test/scripts/intbase.py @@ -29,7 +29,7 @@ class IntBaseTest( unittest.TestCase ): self.assertTrue( -0x7FFFFFFF == numVariant(-0x7FFFFFFF) ) self.assertTrue( -20000000000 == numVariant(-20000000000) ) self.assertTrue( -0x8000000000000000 == numVariant(-0x8000000000000000) ) - self.assertTrue( numVariant(0x20L) == numVariant(0x20) ) + #self.assertTrue( numVariant(0x20L) == numVariant(0x20) ) self.assertTrue( True == numVariant(True) ) self.assertTrue( False == numVariant(0) ) self.assertTrue( True == numVariant(1) ) diff --git a/test/scripts/memtest.py b/test/scripts/memtest.py index 8132926..02b16b4 100644 --- a/test/scripts/memtest.py +++ b/test/scripts/memtest.py @@ -21,49 +21,49 @@ class MemoryTest( unittest.TestCase ): ucharArray = pykd.loadBytes( target.module.ucharArray, 5 ) testArray = [ 0, 10, 0x78, 128, 0xFF ] self.assertEqual( 5, len(ucharArray) ) - self.assertEqual( 0, len( [ ucharArray[i] for i in xrange(5) if ucharArray[i] != testArray[i] ] ) ) + self.assertEqual( 0, len( [ ucharArray[i] for i in range(5) if ucharArray[i] != testArray[i] ] ) ) def testLoadWords( self ): loadArray = pykd.loadWords( target.module.ushortArray, 5 ) testArray = [ 0, 10, 0xFF, 0x8000, 0xFFFF ] self.assertEqual( len(testArray), len(loadArray) ) - self.assertEqual( 0, len( [ loadArray[i] for i in xrange(len(testArray)) if loadArray[i] != testArray[i] ] ) ) + self.assertEqual( 0, len( [ loadArray[i] for i in range(len(testArray)) if loadArray[i] != testArray[i] ] ) ) def testLoadDWords( self ): loadArray = pykd.loadDWords( target.module.ulongArray, 5 ) testArray = [ 0, 0xFF, 0x8000, 0x80000000, 0xFFFFFFFF ] self.assertEqual( len(testArray), len(loadArray) ) - self.assertEqual( 0, len( [ loadArray[i] for i in xrange(len(testArray)) if loadArray[i] != testArray[i] ] ) ) + self.assertEqual( 0, len( [ loadArray[i] for i in range(len(testArray)) if loadArray[i] != testArray[i] ] ) ) def testLoadQWords( self ): loadArray = pykd.loadQWords( target.module.ulonglongArray, 5 ) testArray = [ 0, 0xFF, 0xFFFFFFFF, 0x8000000000000000, 0xFFFFFFFFFFFFFFFF ] self.assertEqual( len(testArray), len(loadArray) ) - self.assertEqual( 0, len( [ loadArray[i] for i in xrange(len(testArray)) if loadArray[i] != testArray[i] ] ) ) + self.assertEqual( 0, len( [ loadArray[i] for i in range(len(testArray)) if loadArray[i] != testArray[i] ] ) ) def testLoadSignBytes( self ): charArray = pykd.loadSignBytes( target.module.ucharArray, 5 ) testArray = [ 0, 10, 0x78, -128, -1 ] self.assertEqual( 5, len(charArray) ) - self.assertEqual( 0, len( [ charArray[i] for i in xrange(len(testArray)) if charArray[i] != testArray[i] ] ) ) + self.assertEqual( 0, len( [ charArray[i] for i in range(len(testArray)) if charArray[i] != testArray[i] ] ) ) def testLoadSignWords( self ): loadArray = pykd.loadSignWords( target.module.ushortArray, 5 ) testArray = [ 0, 10, 255, -32768, -1 ] self.assertEqual( len(testArray), len(loadArray) ) - self.assertEqual( 0, len( [ loadArray[i] for i in xrange(len(testArray)) if loadArray[i] != testArray[i] ] ) ) + self.assertEqual( 0, len( [ loadArray[i] for i in range(len(testArray)) if loadArray[i] != testArray[i] ] ) ) def testLoadSignDWords( self ): loadArray = pykd.loadSignDWords( target.module.ulongArray, 5 ) testArray = [0, 255, 32768, -2147483648, -1] self.assertEqual( len(testArray), len(loadArray) ) - self.assertEqual( 0, len( [ loadArray[i] for i in xrange(len(testArray)) if loadArray[i] != testArray[i] ] ) ) + self.assertEqual( 0, len( [ loadArray[i] for i in range(len(testArray)) if loadArray[i] != testArray[i] ] ) ) def testLoadSignQWords( self ): loadArray = pykd.loadSignQWords( target.module.ulonglongArray, 5 ) - testArray = [0, 255, 4294967295L, -9223372036854775808L, -1] + testArray = [0, 255, 4294967295, -9223372036854775808, -1] self.assertEqual( len(testArray), len(loadArray) ) - self.assertEqual( 0, len( [ loadArray[i] for i in xrange(len(testArray)) if loadArray[i] != testArray[i] ] ) ) + self.assertEqual( 0, len( [ loadArray[i] for i in range(len(testArray)) if loadArray[i] != testArray[i] ] ) ) def testPtrRead( self ): self.assertEqual( 0x80, pykd.ptrByte( target.module.bigValue ) ) diff --git a/test/scripts/moduletest.py b/test/scripts/moduletest.py index 63d3360..57b828b 100644 --- a/test/scripts/moduletest.py +++ b/test/scripts/moduletest.py @@ -123,3 +123,17 @@ class ModuleTest( unittest.TestCase ): # lst2 = target.module.getEnums() # self.assertNotEqual( 0, len(lst2) ) # self.assertTrue( "enumType" in lst2 ) + + def testCompare(self): + self.assertTrue(target.module.begin() == target.module) + self.assertTrue(target.module.begin() + 1 != target.module) + self.assertTrue(target.module.begin() + 1 > target.module) + self.assertTrue(target.module.begin() + 1 >= target.module) + self.assertTrue(target.module.begin() - 1 < target.module) + self.assertTrue(target.module.begin() - 1 <= target.module) + self.assertTrue( True if target.module else False ) + self.assertTrue( False if not target.module else True ) + self.assertFalse(target.module==None) + self.assertTrue(target.module!=None) + + diff --git a/test/scripts/mspdbtest.py b/test/scripts/mspdbtest.py index 998aa2a..968afa9 100644 --- a/test/scripts/mspdbtest.py +++ b/test/scripts/mspdbtest.py @@ -22,7 +22,7 @@ class MsPdbTest(unittest.TestCase): """Lookup symbol by name/address""" with PeFileAsDumpLoader( os.path.join(os.environ["WINDIR"], r"System32\ole32.dll") ): mod = pykd.module("ole32") - print "\n" + str( mod ) + print( "\n" + str( mod ) ) targetSymAddr = mod.offset("CPackagerMoniker::Create") self.assertNotEqual( 0, targetSymAddr ) @@ -34,7 +34,7 @@ class MsPdbTest(unittest.TestCase): with PeFileAsDumpLoader( os.path.join(os.environ["WINDIR"], r"System32\authz.dll") ): mod = pykd.module("authz") - print "\n" + str( mod ) + print("\n" + str( mod )) targetSymAddr = mod.offset("AuthzpDefaultAccessCheck") self.assertNotEqual( 0, targetSymAddr ) @@ -46,6 +46,6 @@ class MsPdbTest(unittest.TestCase): with PeFileAsDumpLoader( os.path.join(os.environ["WINDIR"], r"System32\ntdll.dll") ): mod = pykd.module("ntdll") - print "\n" + str( mod ) + print( "\n" + str( mod )) self.assertNotEqual( 0, len( mod.enumSymbols("Zw*") ) ) \ No newline at end of file diff --git a/test/scripts/pykdtest.py b/test/scripts/pykdtest.py index 706571e..4793e1d 100644 --- a/test/scripts/pykdtest.py +++ b/test/scripts/pykdtest.py @@ -71,20 +71,23 @@ def getTestSuite( singleName = "" ): else: return unittest.TestSuite( [ - #unittest.TestLoader().loadTestsFromTestCase( StartProcessWithoutParamsTest ), + unittest.TestLoader().loadTestsFromTestCase( StartProcessWithoutParamsTest ), unittest.TestLoader().loadTestsFromName( singleName ), - #unittest.TestLoader().loadTestsFromTestCase( TerminateProcessTest ) + unittest.TestLoader().loadTestsFromTestCase( TerminateProcessTest ) ] ) if __name__ == "__main__": - print "\nTesting PyKd ver.", pykd.__version__ - print "Directory:", os.path.dirname(pykd.__file__) + print( "\nTesting PyKd ver. %s" % pykd.__version__ ) + print( "Directory: %s" % os.path.dirname(pykd.__file__) ) target.appPath = os.path.join( os.path.dirname(pykd.__file__), "targetapp.exe" ) target.moduleName = os.path.splitext(os.path.basename(target.appPath))[0] unittest.TextTestRunner(stream=sys.stdout, verbosity=2).run( getTestSuite() ) + #unittest.TextTestRunner(stream=sys.stdout, verbosity=2).run( getTestSuite("typeinfo.TypeInfoTest.testCompareWihNone") ) - raw_input("Press ...") - + try: input = raw_input + except NameError: pass + + input("Press ...") diff --git a/test/scripts/stacktest.py b/test/scripts/stacktest.py index 09b7257..6c013e2 100644 --- a/test/scripts/stacktest.py +++ b/test/scripts/stacktest.py @@ -31,11 +31,10 @@ class StackTest(unittest.TestCase): frame0 = pykd.getFrame() self.assertEqual( ["this", "a", "b"], [ name for name, param in frame0.getParams() ] ) - frame1 = pykd.getStack()[1] self.assertEqual( ["a", "b", "c"], [ name for name, param in frame1.getParams() ] ) - self.assertEqual( 10, frame1.getParam("a").deref() ) - self.assertEqual( 10, frame1.params["a"].deref() ) + self.assertEqual( 10, frame1.getParam("a") ) + self.assertEqual( 10, frame1.params["a"] ) frame2 = pykd.getStack()[2] self.assertEqual( 10, frame2.params["a"] ) diff --git a/test/scripts/targetprocess.py b/test/scripts/targetprocess.py index 98fa74e..e7cb51d 100644 --- a/test/scripts/targetprocess.py +++ b/test/scripts/targetprocess.py @@ -22,14 +22,14 @@ class ProcessTest(unittest.TestCase): proc = pykd.targetProcess.getCurrent() threadNumber = proc.getNumberThreads() self.assertLess(0, threadNumber) - for i in xrange(threadNumber): + for i in range(threadNumber): thread = proc.getThread(i) self.assertNotEqual(0, thread.systemID ) self.assertNotEqual(0, thread.teb ) def testEnumProcesses(self): processNumber = pykd.targetProcess.getNumber() - for i in xrange(processNumber): + for i in range(processNumber): proc = pykd.targetProcess(i) self.assertNotEqual(0, proc.systemID) self.assertNotEqual(0, proc.peb) @@ -38,7 +38,7 @@ class ProcessTest(unittest.TestCase): proc = pykd.targetProcess.getCurrent() threadNumber = proc.getNumberThreads() self.assertLess(0, threadNumber) - for i in xrange(threadNumber): + for i in range(threadNumber): thread = proc.getThread(i) thread.setCurrent() diff --git a/test/scripts/typedvar.py b/test/scripts/typedvar.py index 4a9bfe0..4a0d8b0 100644 --- a/test/scripts/typedvar.py +++ b/test/scripts/typedvar.py @@ -354,3 +354,18 @@ class TypedVarTest( unittest.TestCase ): self.assertEqual( 0xFFFFFFFF80000000, tv.getAddress() ) self.assertEqual( 0xFFFFFFFF80000000, tv ) + def testCompare(self): + self.assertTrue( 10002000 == target.module.typedVar( "ulongVar" ) ) + self.assertTrue( 10002001 != target.module.typedVar( "ulongVar" ) ) + self.assertTrue( 10002001 > target.module.typedVar( "ulongVar" ) ) + self.assertTrue( 10001999 < target.module.typedVar( "ulongVar" ) ) + self.assertTrue( 10002001 >= target.module.typedVar( "ulongVar" ) ) + self.assertTrue( 10001999 <= target.module.typedVar( "ulongVar" ) ) + self.assertTrue( True if target.module.typedVar( "ulongVar" ) else False ) + self.assertTrue( False if not target.module.typedVar( "ulongVar" ) else True ) + + + def testCompareWihNone(self): + tv = target.module.typedVar( "structTest", target.module.g_structTest ) + self.assertFalse(tv==None) + self.assertTrue(tv!=None) diff --git a/test/scripts/typeinfo.py b/test/scripts/typeinfo.py index e566705..5bd9e8d 100644 --- a/test/scripts/typeinfo.py +++ b/test/scripts/typeinfo.py @@ -325,3 +325,6 @@ class TypeInfoTest( unittest.TestCase ): lst = target.module.enumTypes("NonExsistType") self.assertEqual([],lst) + + def testArrayOverflow(self): + self.assertRaises(pykd.TypeException, pykd.baseTypes.UInt8B.arrayOf, 0xFFFFFFFFFFFFFFFF)