From 06239a502a4cfc1d3d06fbd29bb6140832a0b607 Mon Sep 17 00:00:00 2001
From: "SND\\kernelnet_cp"
 <SND\kernelnet_cp@9b283d60-5439-405e-af05-b73fd8c4d996>
Date: Fri, 9 Sep 2016 08:34:59 +0000
Subject: [PATCH] [0.3.x] added : setIP, setSP, setBP routines ( change
 instruction, stack, frame pointers )

git-svn-id: https://pykd.svn.codeplex.com/svn@91034 9b283d60-5439-405e-af05-b73fd8c4d996
---
 pykd/pycpucontext.h | 17 +++++++++++++++++
 pykd/pymod.cpp      |  6 ++++++
 2 files changed, 23 insertions(+)

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,