diff --git a/test/scripts/basetest.py b/test/scripts/basetest.py new file mode 100644 index 0000000..bc7b552 --- /dev/null +++ b/test/scripts/basetest.py @@ -0,0 +1,14 @@ +# +# +# + +import unittest +import target + +class BaseTest( unittest.TestCase ): + + def test1( self ): + self.assertNotEqual( target.module, None ) + + + \ No newline at end of file diff --git a/test/scripts/pykdtest.py b/test/scripts/pykdtest.py index 0688453..68497d9 100644 --- a/test/scripts/pykdtest.py +++ b/test/scripts/pykdtest.py @@ -1,37 +1,69 @@ + import sys import os import unittest +import pykd +import target +import basetest +import typeinfo + + +if __name__ == "__main__": + + targetAppPath = sys.argv[1] + + target.moduleName = os.path.splitext(os.path.basename(targetAppPath))[0] + + pykd.startProcess( targetAppPath ) + pykd.go() + + target.module = pykd.loadModule( target.moduleName ) + + suite = unittest.TestSuite( [ + # unittest.TestLoader().loadTestsFromTestCase( basetest.BaseTest ), + unittest.TestLoader().loadTestsFromTestCase( typeinfo.TypeInfoTest ), + ] ) + + unittest.TextTestRunner().run( suite ) + + + + + + + # Append current pykd.pyd path to PYTHONPATH -sys.path.append(os.path.dirname(sys.argv[1])) -import pykd +#sys.path.append(os.path.dirname(sys.argv[1])) +#import pykd -class TestPykd(unittest.TestCase): +#class TestPykd(unittest.TestCase): - def setUp(self): - self.targetAppPath = sys.argv[1] - self.targetModuleName = os.path.splitext(os.path.basename(self.targetAppPath))[0] - self.targetModule = None - self.gVerInfoOffset = 0L - self.verInfo = None +# def setUp(self): +# self.targetAppPath = sys.argv[1] +# self.targetModuleName = os.path.splitext(os.path.basename(self.targetAppPath))[0] +# self.targetModule = None +# self.gVerInfoOffset = 0L +# self.verInfo = None - def testPykd(self): - print self.targetAppPath +# def testPykd(self): +# print self.targetAppPath - self.assertTrue(pykd.startProcess(self.targetAppPath)) +# self.assertTrue(pykd.startProcess(self.targetAppPath)) - self.targetModule = pykd.loadModule(self.targetModuleName) - self.assertNotEqual(self.targetModule, None) - pykd.go() +# self.targetModule = pykd.loadModule(self.targetModuleName) +# self.assertNotEqual(self.targetModule, None) +# pykd.go() - self.gVerInfoOffset = pykd.getOffset(self.targetModuleName, "gVerInfo") - self.assertNotEqual(self.gVerInfoOffset, 0L) +# self.gVerInfoOffset = pykd.getOffset(self.targetModuleName, "gVerInfo") +# self.assertNotEqual(self.gVerInfoOffset, 0L) - self.verInfo = pykd.typedVar(self.targetModuleName, "_OSVERSIONINFOA", self.gVerInfoOffset) - self.assertNotEqual(self.verInfo, None) - pykd.go() +# self.verInfo = pykd.typedVar(self.targetModuleName, "_OSVERSIONINFOA", self.gVerInfoOffset) +# self.assertNotEqual(self.verInfo, None) +# pykd.go() + -if __name__ == '__main__': +#if __name__ == '__main__': #unittest.main(argv=[]) - suite = unittest.TestLoader().loadTestsFromTestCase(TestPykd) - unittest.TextTestRunner().run(suite) +# suite = unittest.TestLoader().loadTestsFromTestCase(TestPykd) +# unittest.TextTestRunner().run(suite) diff --git a/test/scripts/target.py b/test/scripts/target.py new file mode 100644 index 0000000..9b4193c --- /dev/null +++ b/test/scripts/target.py @@ -0,0 +1,7 @@ +# +# +# + + +module = None +moduleName = None \ No newline at end of file diff --git a/test/scripts/typeinfo.py b/test/scripts/typeinfo.py new file mode 100644 index 0000000..e00f3fd --- /dev/null +++ b/test/scripts/typeinfo.py @@ -0,0 +1,37 @@ +# +# +# + +import unittest +import pykd +import target + + +class TypeInfoTest( unittest.TestCase ): + + def testBasicTypes(self): + + self.assertEqual( pykd.char_t.name(), "char" ) + self.assertEqual( pykd.char_t.size(), 1 ) + self.assertEqual( pykd.uchar_t.name(), "unsigned char" ) + self.assertEqual( pykd.uchar_t.size(), 1 ) + + def testSimpleStruct(self): + + ti = pykd.typeInfo( target.moduleName, "Type1" ) + self.assertEqual( hasattr( ti, "field1" ), True ) + self.assertEqual( hasattr( ti, "field2" ), True ) + + tv = pykd.typedVar( ti, target.module.var1 ) + self.assertEqual( tv.field1, -121 ) + self.assertEqual( tv.field2, 220 ) + + def testEnumField(self): + ti = pykd.typeInfo( target.moduleName, "Type2" ) + self.assertEqual( hasattr( ti, "field1" ), True ) + + tv = pykd.typedVar( ti, target.module.var2 ) + self.assertEqual( tv.field1, 100 ) + + + diff --git a/test/targetapp/targetapp.vcproj b/test/targetapp/targetapp.vcproj index 91059c9..6defe5e 100644 --- a/test/targetapp/targetapp.vcproj +++ b/test/targetapp/targetapp.vcproj @@ -1,14 +1,10 @@ <?xml version="1.0" encoding="windows-1251"?> <VisualStudioProject ProjectType="Visual C++" - Version="9.00" + Version="9,00" Name="targetapp" ProjectGUID="{C6254E16-AB8E-41EE-887D-31458E93FC68}" RootNamespace="targetapp" - SccProjectName="SAK" - SccAuxPath="SAK" - SccLocalPath="SAK" - SccProvider="SAK" Keyword="Win32Proj" TargetFrameworkVersion="131072" > @@ -364,6 +360,10 @@ RelativePath=".\targetapp.cpp" > </File> + <File + RelativePath=".\types.cpp" + > + </File> <File RelativePath=".\utils.cpp" > @@ -393,6 +393,26 @@ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}" > </Filter> + <Filter + Name="scripts" + > + <File + RelativePath="..\scripts\basetest.py" + > + </File> + <File + RelativePath="..\scripts\pykdtest.py" + > + </File> + <File + RelativePath="..\scripts\target.py" + > + </File> + <File + RelativePath="..\scripts\typeinfo.py" + > + </File> + </Filter> </Files> <Globals> </Globals> diff --git a/test/targetapp/types.cpp b/test/targetapp/types.cpp new file mode 100644 index 0000000..96c056e --- /dev/null +++ b/test/targetapp/types.cpp @@ -0,0 +1,39 @@ +#include "stdafx.h" + +/////////////////////////////////////////////////////////////////////////////// + +// ������� ���� + +char charVar = -100; +unsigned char ucharVar = 200; + +/////////////////////////////////////////////////////////////////////////////// + +enum Enum1 { + + Enum1Val1 = 100, + Enum1Val2 = 200, + Enum1Val3 = 300 +}; + + +struct Type1 { + + char field1; + + unsigned char field2; + +}; + +Type1 var1 = { -121, 220 }; + + +struct Type2 { + + Enum1 field1; + +}; + +Type2 var2 = { Enum1Val1 }; + +/////////////////////////////////////////////////////////////////////////////// \ No newline at end of file