pykd/pykd/cpucontext.h
SND\kernelnet_cp b94a9cdaae [0.3.x] added : setProcessorMode, switchProcessorMode
git-svn-id: https://pykd.svn.codeplex.com/svn@84520 9b283d60-5439-405e-af05-b73fd8c4d996
2017-11-03 14:36:26 +04:00

66 lines
1.8 KiB
C++

#pragma once
#include <boost/python/tuple.hpp>
namespace python = boost::python;
#include "kdlib/dbgengine.h"
#include "kdlib/cpucontext.h"
namespace pykd {
///////////////////////////////////////////////////////////////////////////////
class CPUContextAdaptor
{
public:
static python::object getRegisterByName( kdlib::CPUContext& cpu, const std::wstring &name );
static python::object getRegisterByIndex( kdlib::CPUContext& cpu, unsigned long index );
static python::list getStack( kdlib::CPUContext& cpu );
};
struct StackFrame {
kdlib::MEMOFFSET_64 ip, ret, fp, sp;
};
std::wstring printStackFrame( StackFrame& frame );
inline python::object getRegisterByName( const std::wstring &name )
{
return CPUContextAdaptor::getRegisterByName( *kdlib::loadCPUCurrentContext().get(), name );
}
inline unsigned long long loadMSR( unsigned long msrIndex )
{
return kdlib::loadCPUCurrentContext()->loadMSR( msrIndex );
}
inline void setMSR( unsigned long msrIndex, unsigned long long value )
{
return kdlib::loadCPUCurrentContext()->setMSR( msrIndex, value );
}
inline kdlib::CPUType getProcessorMode() {
return kdlib::loadCPUCurrentContext()->getCPUMode();
}
inline kdlib::CPUType getProcessorType() {
return kdlib::loadCPUCurrentContext()->getCPUType();
}
inline void setProcessorMode( kdlib::CPUType mode ) {
kdlib::loadCPUCurrentContext()->setCPUMode(mode);
}
inline void switchProcessorMode() {
kdlib::loadCPUCurrentContext()->switchCPUMode();
}
inline python::list getCurrentStack() {
return CPUContextAdaptor::getStack( *kdlib::loadCPUCurrentContext() );
}
///////////////////////////////////////////////////////////////////////////////
} //end namespace pykd