diff --git a/pykd/pycpucontext.h b/pykd/pycpucontext.h index 34a1726..d3e9f75 100644 --- a/pykd/pycpucontext.h +++ b/pykd/pycpucontext.h @@ -101,6 +101,23 @@ inline kdlib::MEMOFFSET_64 getFP() return kdlib::getFrameOffset(); } +inline void setIP(kdlib::MEMOFFSET_64 offset) +{ + AutoRestorePyState pystate; + kdlib::setInstructionOffset(offset); +} + +inline void setSP(kdlib::MEMOFFSET_64 offset) +{ + AutoRestorePyState pystate; + return kdlib::setStackOffset(offset); +} + +inline void setFP(kdlib::MEMOFFSET_64 offset) +{ + AutoRestorePyState pystate; + return kdlib::setFrameOffset(offset); +} inline unsigned long long loadMSR( unsigned long msrIndex ) { AutoRestorePyState pystate; diff --git a/pykd/pymod.cpp b/pykd/pymod.cpp index e9e3349..d2c16aa 100644 --- a/pykd/pymod.cpp +++ b/pykd/pymod.cpp @@ -425,6 +425,12 @@ BOOST_PYTHON_MODULE( pykd ) "Return stack pointer"); python::def("getFP", pykd::getFP, "Return frame pointer"); + python::def("setIP", pykd::setIP, + "Change instruction pointer"); + python::def("setSP", pykd::setSP, + "Change stack pointer"); + python::def("setFP", pykd::setFP, + "Change frame pointer"); python::def ( "rdmsr", pykd::loadMSR, "Return MSR value" ); python::def( "wrmsr", pykd::setMSR,