#pragma once namespace pykd { ///////////////////////////////////////////////////////////////////////////////// class Disasm { public: Disasm( ULONG64 offset = 0); std::string disassemble() { std::string s = m_disasm; m_currentOffset += m_length; doDisasm(); return s; } std::string jump(ULONG64 offset) { m_currentOffset = offset; doDisasm(); return disassemble(); } std::string reset() { m_currentOffset = m_beginOffset; doDisasm(); return disassemble(); } std::string assembly( const std::string &instr ); std::string instruction() const { return m_disasm; } ULONG64 begin() const { return m_beginOffset; } ULONG64 current() const { return m_currentOffset; } ULONG length() const { return m_length; } ULONG64 ea() const { return m_ea; } private: void doDisasm(); ULONG64 m_beginOffset; ULONG64 m_currentOffset; ULONG64 m_ea; ULONG m_length; std::string m_disasm; }; ///////////////////////////////////////////////////////////////////////////////// } ; // end pykd namespace