mirror of
https://github.com/ivellioscolin/pykd.git
synced 2025-04-29 11:53:23 +08:00
[0.2.x] added : getCurrentProcess, setCurrentProcess, getImplicitThread, getImplicitThread
git-svn-id: https://pykd.svn.codeplex.com/svn@80000 9b283d60-5439-405e-af05-b73fd8c4d996
This commit is contained in:
parent
3a4a5400b8
commit
8e13e35311
@ -84,5 +84,12 @@ ULONG breakPointSet( ULONG64 offset, bool hardware = false, ULONG size = 0, ULON
|
||||
void breakPointRemove( ULONG id );
|
||||
void breakPointRemoveAll();
|
||||
|
||||
|
||||
// processes end threads
|
||||
ULONG64 getCurrentProcess();
|
||||
ULONG64 getImplicitThread();
|
||||
void setCurrentProcess( ULONG64 processAddr );
|
||||
void setImplicitThread( ULONG64 threadAddr );
|
||||
|
||||
};
|
||||
|
||||
|
@ -235,6 +235,16 @@ BOOST_PYTHON_MODULE( pykd )
|
||||
python::def( "removeAllBp", &removeAllBp,
|
||||
"Remove all breapoints" );
|
||||
|
||||
// processes and threads
|
||||
python::def( "getCurrentProcess", &getCurrentProcess,
|
||||
"Return pointer to current process's block" );
|
||||
python::def( "getImplicitThread", &getImplicitThread,
|
||||
"Return implicit thread for current process" );
|
||||
python::def( "setCurrentProcess", &setCurrentProcess,
|
||||
"Set current process by address" );
|
||||
python::def( "setImplicitThread", &setImplicitThread,
|
||||
"Set implicit thread for current process" );
|
||||
|
||||
// custom types
|
||||
python::def( "createStruct", &CustomStruct::create, CustomStruct_create( python::args( "name", "align" ),
|
||||
"Create empty structure. Use append() method for building" ) );
|
||||
|
@ -943,6 +943,68 @@ HRESULT STDMETHODCALLTYPE DebugEngine::Breakpoint(
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
ULONG64
|
||||
getCurrentProcess()
|
||||
{
|
||||
PyThread_StateRestore pyThreadRestore( g_dbgEng->pystate );
|
||||
|
||||
HRESULT hres;
|
||||
ULONG64 processAddr = 0;
|
||||
|
||||
hres = g_dbgEng->system->GetImplicitProcessDataOffset( &processAddr );
|
||||
if ( FAILED( hres ) )
|
||||
throw DbgException( "IDebugSystemObjects2::GetImplicitProcessDataOffset failed" );
|
||||
|
||||
return processAddr;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
ULONG64
|
||||
getImplicitThread()
|
||||
{
|
||||
PyThread_StateRestore pyThreadRestore( g_dbgEng->pystate );
|
||||
|
||||
HRESULT hres;
|
||||
ULONG64 threadOffset = -1;
|
||||
|
||||
hres = g_dbgEng->system->GetImplicitThreadDataOffset( &threadOffset );
|
||||
if ( FAILED( hres ) )
|
||||
throw DbgException( "IDebugSystemObjects2::GetImplicitThreadDataOffset failed" );
|
||||
|
||||
return threadOffset;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void setCurrentProcess( ULONG64 processAddr )
|
||||
{
|
||||
PyThread_StateRestore pyThreadRestore( g_dbgEng->pystate );
|
||||
|
||||
HRESULT hres;
|
||||
|
||||
processAddr = addr64(processAddr);
|
||||
hres = g_dbgEng->system->SetImplicitProcessDataOffset( processAddr );
|
||||
if ( FAILED( hres ) )
|
||||
throw DbgException( "IDebugSystemObjects2::SetImplicitProcessDataOffset failed" );
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void setImplicitThread( ULONG64 threadAddr )
|
||||
{
|
||||
PyThread_StateRestore pyThreadRestore( g_dbgEng->pystate );
|
||||
|
||||
HRESULT hres;
|
||||
|
||||
threadAddr = addr64(threadAddr);
|
||||
hres = g_dbgEng->system->SetImplicitThreadDataOffset( threadAddr );
|
||||
if ( FAILED( hres ) )
|
||||
throw DbgException( "IDebugSystemObjects2::SetImplicitThreadDataOffset failed" );
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
} // end pykd namespace
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user