pykd/pykd/vardata.h
SND\kernelnet_cp 3a47a6574d [0.2.x] added : cpuReg class
git-svn-id: https://pykd.svn.codeplex.com/svn@78577 9b283d60-5439-405e-af05-b73fd8c4d996
2017-11-08 17:42:50 +04:00

98 lines
2.2 KiB
C++

//
// Access to variable data
//
#pragma once
////////////////////////////////////////////////////////////////////////////////
//#include <array>
#include "symengine.h"
////////////////////////////////////////////////////////////////////////////////
namespace pykd {
class VarData;
typedef boost::shared_ptr< VarData > VarDataPtr;
// access to variable data interface
class VarData
{
public:
virtual ~VarData() {}
virtual std::string asString() const = 0;
virtual ULONG64 getAddr() const = 0;
virtual VarDataPtr fork(ULONG offset) const = 0;
virtual void read(PVOID buffer, ULONG length, ULONG offset = 0) const = 0;
virtual ULONG64 readPtr() const = 0;
};
// variable in memory
class VarDataMemory : public VarData
{
public:
// IVarData implementation
virtual std::string asString() const;
virtual ULONG64 getAddr() const;
virtual VarDataPtr fork(ULONG offset) const;
virtual void read(PVOID buffer, ULONG length, ULONG offset = 0) const;
virtual ULONG64 readPtr() const;
static VarDataPtr factory(ULONG64 addr) {
return VarDataPtr( new VarDataMemory(addr) );
}
protected:
VarDataMemory(ULONG64 addr);
private:
ULONG64 m_addr;
};
// constant variable
class VarDataConst : public VarData
{
public:
// IVarData implementation
virtual std::string asString() const;
virtual ULONG64 getAddr() const;
virtual VarDataPtr fork(ULONG offset) const;
virtual void read(PVOID buffer, ULONG length, ULONG offset = 0) const;
virtual ULONG64 readPtr() const;
static VarDataPtr factory(SymbolPtr &symData) {
return VarDataPtr( new VarDataConst(symData) );
}
protected:
VarDataConst(SymbolPtr &symData);
VarDataConst(const VarDataConst &from, ULONG fieldOffset);
//template<typename T>
//void fillDataBuff(const T &data)
//{
// RtlCopyMemory( &m_dataBuff->at(0), &data, min(sizeof(T), m_dataBuff->size()) );
//}
private:
BaseTypeVariant m_value;
ULONG m_fieldOffset;
//ULONG m_fieldOffset;
//boost::shared_ptr< std::vector<UCHAR> > m_dataBuff;
};
}
//////////////////////////////////////////////////////////////////////////