mirror of
https://github.com/ivellioscolin/pykd.git
synced 2025-04-21 12:53:23 +08:00
66 lines
1.8 KiB
C++
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
|