diff --git a/pykd/dbgcmd.h b/pykd/dbgcmd.h new file mode 100644 index 0000000..9b361e9 --- /dev/null +++ b/pykd/dbgcmd.h @@ -0,0 +1,86 @@ +#pragma once + +#include +#include +#include "pyaux.h" + +///////////////////////////////////////////////////////////////////////////////// + +std::string +dbgCommand( const std::wstring &command ); + +template +void +setExecutionStatus() +{ + HRESULT hres; + + hres = dbgExt->control->SetExecutionStatus( status ); + + if ( FAILED( hres ) ) + throw DbgException( "IDebugControl::SetExecutionStatus failed" ); + + ULONG currentStatus; + + do { + + { + PyThread_StateRestore pyThreadRestore; + hres = dbgExt->control->WaitForEvent( 0, INFINITE ); + } + + if ( FAILED( hres ) ) + { + if (E_UNEXPECTED == hres) + throw WaitEventException(); + + throw DbgException( "IDebugControl::WaitForEvent failed" ); + } + + hres = dbgExt->control->GetExecutionStatus( ¤tStatus ); + + if ( FAILED( hres ) ) + throw DbgException( "IDebugControl::GetExecutionStatus failed" ); + + } while( currentStatus != DEBUG_STATUS_BREAK && currentStatus != DEBUG_STATUS_NO_DEBUGGEE ); + +} + +///////////////////////////////////////////////////////////////////////////////// + +class dbgExtensionClass { + +public: + + dbgExtensionClass() : + m_handle( NULL ) + {} + + dbgExtensionClass( const char* path ); + + ~dbgExtensionClass(); + + std::string + call( const std::string &command, const std::string param ); + + std::string + print() const; + +private: + + ULONG64 m_handle; + std::string m_path; +}; + + +///////////////////////////////////////////////////////////////////////////////// + +ULONG64 +evaluate( const std::string &expression ); + +///////////////////////////////////////////////////////////////////////////////// + +void +breakin(); + +///////////////////////////////////////////////////////////////////////////////// \ No newline at end of file