From 9dca38d926665101b32b0556960f8a68413346a6 Mon Sep 17 00:00:00 2001 From: "SND\\EreTIk_cp" Date: Fri, 6 Jun 2014 10:30:02 +0000 Subject: [PATCH] [0.3.x] added : fucntion debug range git-svn-id: https://pykd.svn.codeplex.com/svn@88556 9b283d60-5439-405e-af05-b73fd8c4d996 --- pykd/pymod.cpp | 4 ++++ pykd/pytypedvar.h | 12 ++++++++++++ test/scripts/pykdtest.py | 4 +++- test/scripts/typedvar.py | 6 ++++++ 4 files changed, 25 insertions(+), 1 deletion(-) diff --git a/pykd/pymod.cpp b/pykd/pymod.cpp index ad53be0..4143f6b 100644 --- a/pykd/pymod.cpp +++ b/pykd/pymod.cpp @@ -595,6 +595,10 @@ BOOST_PYTHON_MODULE( pykd ) .def("__init__", python::make_constructor(pykd::getTypedVarByTypeInfo) ) .def("getAddress", TypedVarAdapter::getAddress, "Return virtual address" ) + .def("getDebugStart", TypedVarAdapter::getDebugStart, + "Return end location of the function's prologue code (virtual address)" ) + .def("getDebugEnd", TypedVarAdapter::getDebugEnd, + "Return beginning location of the function's epilogue code (virtual address)" ) .def("sizeof", TypedVarAdapter::getSize, "Return size of a variable in the target memory" ) .def("fieldOffset", TypedVarAdapter::getFieldOffsetByName, diff --git a/pykd/pytypedvar.h b/pykd/pytypedvar.h index 79d9d4e..046eeb2 100644 --- a/pykd/pytypedvar.h +++ b/pykd/pytypedvar.h @@ -56,6 +56,18 @@ struct TypedVarAdapter { return typedVar.getAddress(); } + static kdlib::MEMOFFSET_64 getDebugStart( kdlib::TypedVar& typedVar ) + { + AutoRestorePyState pystate; + return typedVar.getDebugStart(); + } + + static kdlib::MEMOFFSET_64 getDebugEnd( kdlib::TypedVar& typedVar ) + { + AutoRestorePyState pystate; + return typedVar.getDebugEnd(); + } + static size_t getSize( kdlib::TypedVar& typedVar ) { AutoRestorePyState pystate; diff --git a/test/scripts/pykdtest.py b/test/scripts/pykdtest.py index 15adbb1..3c27ec9 100644 --- a/test/scripts/pykdtest.py +++ b/test/scripts/pykdtest.py @@ -75,6 +75,8 @@ if __name__ == "__main__": target.appPath = sys.argv[1] target.moduleName = os.path.splitext(os.path.basename(target.appPath))[0] - + unittest.TextTestRunner(stream=sys.stdout, verbosity=2).run( getTestSuite() ) + # raw_input("Press ...") + diff --git a/test/scripts/typedvar.py b/test/scripts/typedvar.py index bde74ae..108365d 100644 --- a/test/scripts/typedvar.py +++ b/test/scripts/typedvar.py @@ -325,3 +325,9 @@ class TypedVarTest( unittest.TestCase ): def testHresult(self): tv = pykd.typedVar( "g_atlException" ) self.assertEqual( tv.m_hr, 0x8000FFFF ) + + def testFunctionDebugRange(self): + tv = pykd.typedVar( "startChildProcess" ) + + self.assertTrue( tv.getDebugStart() >= tv.getAddress() ) + self.assertTrue( tv.getDebugEnd() <= tv.getAddress() + tv.sizeof() )