mirror of
https://github.com/ivellioscolin/pykd.git
synced 2025-04-20 03:23:23 +08:00
[0.1.x] fixed : issue #10541 ( loadWStr: string truncated to 128 chars )
git-svn-id: https://pykd.svn.codeplex.com/svn@76652 9b283d60-5439-405e-af05-b73fd8c4d996
This commit is contained in:
parent
080feb5709
commit
3f42d04cff
@ -204,18 +204,31 @@ std::wstring loadWChars( ULONG64 address, ULONG number, bool phyAddr )
|
||||
|
||||
std::string DebugClient::loadCStr( ULONG64 address )
|
||||
{
|
||||
const size_t maxLength = 0x1000;
|
||||
const size_t maxLength = 0x10000;
|
||||
|
||||
address = addr64( address );
|
||||
|
||||
std::vector<char> buffer(maxLength);
|
||||
ULONG strLength = 0;
|
||||
|
||||
HRESULT hres =
|
||||
m_dataSpaces->ReadMultiByteStringVirtual(
|
||||
address,
|
||||
maxLength,
|
||||
NULL,
|
||||
0,
|
||||
&strLength );
|
||||
|
||||
if ( FAILED( hres ) )
|
||||
throw MemoryException( address );
|
||||
|
||||
std::vector<char> buffer(strLength);
|
||||
|
||||
hres =
|
||||
m_dataSpaces->ReadMultiByteStringVirtual(
|
||||
address,
|
||||
strLength,
|
||||
&buffer[0],
|
||||
maxLength,
|
||||
strLength,
|
||||
NULL );
|
||||
|
||||
if ( FAILED( hres ) )
|
||||
@ -233,24 +246,34 @@ std::string loadCStr( ULONG64 offset )
|
||||
|
||||
std::wstring DebugClient::loadWStr( ULONG64 address )
|
||||
{
|
||||
const size_t maxLength = 0x2000;
|
||||
const size_t maxLength = 0x10000;
|
||||
|
||||
address = addr64( address );
|
||||
|
||||
std::vector<char> buffer(maxLength);
|
||||
ULONG strLength = 0;
|
||||
|
||||
HRESULT hres =
|
||||
m_dataSpaces->ReadMultiByteStringVirtual(
|
||||
m_dataSpaces->ReadUnicodeStringVirtualWide(
|
||||
address,
|
||||
maxLength,
|
||||
NULL,
|
||||
0,
|
||||
&strLength );
|
||||
|
||||
std::vector<wchar_t> buffer(strLength);
|
||||
|
||||
hres =
|
||||
m_dataSpaces->ReadUnicodeStringVirtualWide(
|
||||
address,
|
||||
strLength,
|
||||
&buffer[0],
|
||||
maxLength,
|
||||
strLength,
|
||||
NULL );
|
||||
|
||||
if ( FAILED( hres ) )
|
||||
throw MemoryException( address );
|
||||
|
||||
return std::wstring( (wchar_t*)&buffer[0] );
|
||||
return std::wstring( &buffer[0] );
|
||||
}
|
||||
|
||||
std::wstring loadWStr( ULONG64 offset )
|
||||
|
@ -82,6 +82,10 @@ class MemoryTest( unittest.TestCase ):
|
||||
self.assertEqual( 'Hello', pykd.loadCStr( target.module.helloStr ) )
|
||||
self.assertEqual( u'Hello', pykd.loadWStr( target.module.helloWStr ) )
|
||||
|
||||
def testBigCStr( self ):
|
||||
self.assertEqual( 0x2000, len( pykd.loadCStr( pykd.ptrPtr( target.module.bigCStr ) ) ) )
|
||||
self.assertEqual( 0x2000, len( pykd.loadWStr( pykd.ptrPtr( target.module.bigWStr ) ) ) )
|
||||
|
||||
def testVaValid( self ):
|
||||
self.assertTrue( pykd.isValid( target.module.begin() ) )
|
||||
self.assertFalse( pykd.isValid( 0 ) )
|
||||
|
@ -347,6 +347,11 @@ VirtualChildClass g_virtChild;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
char* bigCStr = NULL;
|
||||
wchar_t* bigWStr = NULL;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
WNDENUMPROC g_ptrToFunction;
|
||||
void *g_unTypedPtrToFunction = g_ptrToFunction;
|
||||
#pragma pack( pop )
|
||||
@ -599,6 +604,14 @@ int _tmain(int argc, _TCHAR* argv[])
|
||||
g_ptrToFunction = &EnumWindowsProc2;
|
||||
g_unTypedPtrToFunction = &EnumWindowsProc2;
|
||||
|
||||
bigCStr = new char[0x2000 + 1];
|
||||
memset( bigCStr, 'a', 0x2000 );
|
||||
bigCStr[0x2000] = 0;
|
||||
|
||||
bigWStr = new wchar_t[0x2000 + 1];
|
||||
wmemset( bigWStr, L'a', 0x2000 );
|
||||
bigWStr[0x2000] = 0;
|
||||
|
||||
// Let test scripts to execute
|
||||
__debugbreak();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user