mirror of
https://github.com/ivellioscolin/pykd.git
synced 2025-04-21 21:03:23 +08:00
[+] added: loadCStr, loadWStr routine added ( loading c-style string )
git-svn-id: https://pykd.svn.codeplex.com/svn@57285 9b283d60-5439-405e-af05-b73fd8c4d996
This commit is contained in:
parent
d389e26054
commit
69e93336d9
@ -102,6 +102,8 @@ BOOST_PYTHON_MODULE( pykd )
|
||||
boost::python::def( "loadPtrs", &loadPtrArray );
|
||||
boost::python::def( "loadUnicodeString", &loadUnicodeStr );
|
||||
boost::python::def( "loadAnsiString", &loadAnsiStr );
|
||||
boost::python::def( "loadCStr", &loadCStr );
|
||||
boost::python::def( "loadWStr", &loadWStr );
|
||||
boost::python::def( "loadLinkedList", &loadLinkedList );
|
||||
boost::python::def( "ptrByte", &loadByPtr<unsigned char> );
|
||||
boost::python::def( "ptrSignByte", &loadByPtr<char> );
|
||||
@ -189,6 +191,7 @@ SetupDebugEngine( IDebugClient4 *client, DbgExt *dbgExt )
|
||||
client->QueryInterface( __uuidof(IDebugSymbols3), (void ** )&dbgExt->symbols3 );
|
||||
|
||||
client->QueryInterface( __uuidof(IDebugDataSpaces), (void **)&dbgExt->dataSpaces );
|
||||
client->QueryInterface( __uuidof(IDebugDataSpaces4), (void **)&dbgExt->dataSpaces4 );
|
||||
|
||||
client->QueryInterface( __uuidof(IDebugAdvanced2), (void **)&dbgExt->advanced2 );
|
||||
|
||||
|
@ -17,6 +17,7 @@ struct DbgExt {
|
||||
IDebugSymbols3 *symbols3;
|
||||
|
||||
IDebugDataSpaces *dataSpaces;
|
||||
IDebugDataSpaces4 *dataSpaces4;
|
||||
|
||||
IDebugAdvanced2 *advanced2;
|
||||
|
||||
|
@ -322,6 +322,90 @@ loadAnsiStr( ULONG64 address )
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
boost::python::object
|
||||
loadCStr( ULONG64 address )
|
||||
{
|
||||
const size_t maxLength = 0x1000;
|
||||
boost::python::object strObj( std::string("") );
|
||||
|
||||
address = addr64( address );
|
||||
|
||||
char* buffer = new char[maxLength];
|
||||
|
||||
try {
|
||||
|
||||
HRESULT hres =
|
||||
dbgExt->dataSpaces4->ReadMultiByteStringVirtual(
|
||||
address,
|
||||
maxLength,
|
||||
buffer,
|
||||
maxLength,
|
||||
NULL );
|
||||
|
||||
if ( FAILED( hres ) )
|
||||
throw DbgException( "IDebugDataSpace4::ReadMultiByteStringVirtual failed" );
|
||||
|
||||
strObj = boost::python::object( std::string( buffer ) );
|
||||
|
||||
}
|
||||
catch( std::exception &e )
|
||||
{
|
||||
dbgExt->control->Output( DEBUG_OUTPUT_ERROR, "pykd error: %s\n", e.what() );
|
||||
}
|
||||
catch(...)
|
||||
{
|
||||
dbgExt->control->Output( DEBUG_OUTPUT_ERROR, "pykd unexpected error\n" );
|
||||
}
|
||||
|
||||
delete[] buffer;
|
||||
|
||||
return strObj;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
boost::python::object
|
||||
loadWStr( ULONG64 address )
|
||||
{
|
||||
const size_t maxLength = 0x1000;
|
||||
boost::python::object strObj( std::wstring(L"") );
|
||||
|
||||
address = addr64( address );
|
||||
|
||||
wchar_t* buffer = new wchar_t[maxLength];
|
||||
|
||||
try {
|
||||
|
||||
HRESULT hres =
|
||||
dbgExt->dataSpaces4->ReadUnicodeStringVirtualWide(
|
||||
address,
|
||||
maxLength*sizeof(wchar_t),
|
||||
buffer,
|
||||
maxLength,
|
||||
NULL );
|
||||
|
||||
if ( FAILED( hres ) )
|
||||
throw DbgException( "IDebugDataSpace4::ReadUnicodeStringVirtualWide failed" );
|
||||
|
||||
strObj = boost::python::object( std::wstring(buffer) );
|
||||
|
||||
}
|
||||
catch( std::exception &e )
|
||||
{
|
||||
dbgExt->control->Output( DEBUG_OUTPUT_ERROR, "pykd error: %s\n", e.what() );
|
||||
}
|
||||
catch(...)
|
||||
{
|
||||
dbgExt->control->Output( DEBUG_OUTPUT_ERROR, "pykd unexpected error\n" );
|
||||
}
|
||||
|
||||
delete[] buffer;
|
||||
|
||||
return strObj;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
boost::python::object
|
||||
loadLinkedList( ULONG64 address )
|
||||
{
|
||||
|
@ -59,6 +59,12 @@ loadUnicodeStr( ULONG64 address );
|
||||
boost::python::object
|
||||
loadAnsiStr( ULONG64 address );
|
||||
|
||||
boost::python::object
|
||||
loadCStr( ULONG64 address );
|
||||
|
||||
boost::python::object
|
||||
loadWStr( ULONG64 address );
|
||||
|
||||
bool
|
||||
compareMemory( ULONG64 addr1, ULONG64 addr2, ULONG length, BOOLEAN phyAddr = FALSE );
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user