#pragma once #include //#include #include "context.h" #include "dbgexcept.h" namespace pykd { //////////////////////////////////////////////////////////////////////////////// class ThreadContext; typedef boost::shared_ptr< ThreadContext > ContextPtr; class StackFrame; struct CvRegName; //////////////////////////////////////////////////////////////////////////////// std::string processorToStr(ULONG processorMode); //////////////////////////////////////////////////////////////////////////////// class ThreadContext { //public: //typedef std::map RegValues; //ThreadContext(); ////static ContextPtr getWow64Context(); //// get register value by ID //ULONG64 getValue(ULONG cvRegId) const; //ULONG64 getValueByName( const std::string ®Name ) const; //bool getValueNoThrow(ULONG cvRegId, ULONG64 &val) const; //// get @$ip pseudo register //ULONG64 getIp() const; //// get @$retreg pseudo register //ULONG64 getRetReg() const; //// get @$csp pseudo register //ULONG64 getSp() const; //// enumerate register values: tuple //ULONG getCount() const { // return static_cast( m_regValues.size() ); //} //python::object getByIndex(ULONG ind) const; //// get processor type //std::string getProcessorType() const { // return pykd::processorToStr(m_processorType); //} //ContextPtr forkByStackFrame(const StackFrame &stkFrmae) const; //std::string print() const; //protected: //ThreadContext( // ULONG processorType //); //void queryRegisters( // const CvRegName *regs, // ULONG countOfRegs //); //// query i386 registers //void getI386Context(); //// query AMD64 registers //void getAmd64Context(); //// try query as "sub-register" //bool getSubValue(ULONG cvRegId, ULONG64 &val) const; //void __declspec(noreturn) throwUnsupportedProcessor(PCSTR szFunction) const; //private: //RegValues m_regValues; //ULONG m_processorType; }; //////////////////////////////////////////////////////////////////////////////// // //ContextPtr getThreadContext(); // //python::dict getLocals( ContextPtr ctx = getThreadContext() ); //////////////////////////////////////////////////////////////////////////////// }