[0.3.x] added : fucntion debug range

git-svn-id: https://pykd.svn.codeplex.com/svn@88556 9b283d60-5439-405e-af05-b73fd8c4d996
This commit is contained in:
SND\EreTIk_cp 2014-06-06 10:30:02 +00:00 committed by Mikhail I. Izmestev
parent bd6ce0adaa
commit 9dca38d926
4 changed files with 25 additions and 1 deletions

View File

@ -595,6 +595,10 @@ BOOST_PYTHON_MODULE( pykd )
.def("__init__", python::make_constructor(pykd::getTypedVarByTypeInfo) ) .def("__init__", python::make_constructor(pykd::getTypedVarByTypeInfo) )
.def("getAddress", TypedVarAdapter::getAddress, .def("getAddress", TypedVarAdapter::getAddress,
"Return virtual address" ) "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, .def("sizeof", TypedVarAdapter::getSize,
"Return size of a variable in the target memory" ) "Return size of a variable in the target memory" )
.def("fieldOffset", TypedVarAdapter::getFieldOffsetByName, .def("fieldOffset", TypedVarAdapter::getFieldOffsetByName,

View File

@ -56,6 +56,18 @@ struct TypedVarAdapter {
return typedVar.getAddress(); 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 ) static size_t getSize( kdlib::TypedVar& typedVar )
{ {
AutoRestorePyState pystate; AutoRestorePyState pystate;

View File

@ -78,3 +78,5 @@ if __name__ == "__main__":
unittest.TextTestRunner(stream=sys.stdout, verbosity=2).run( getTestSuite() ) unittest.TextTestRunner(stream=sys.stdout, verbosity=2).run( getTestSuite() )
# raw_input("Press <ENTER>...")

View File

@ -325,3 +325,9 @@ class TypedVarTest( unittest.TestCase ):
def testHresult(self): def testHresult(self):
tv = pykd.typedVar( "g_atlException" ) tv = pykd.typedVar( "g_atlException" )
self.assertEqual( tv.m_hr, 0x8000FFFF ) 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() )