[0.1.x] added : loadUnicodeStr routine

[0.1.x] added : loadAnsiStr routine


git-svn-id: https://pykd.svn.codeplex.com/svn@72369 9b283d60-5439-405e-af05-b73fd8c4d996
This commit is contained in:
SND\kernelnet_cp 2011-12-15 14:20:28 +00:00 committed by Mikhail I. Izmestev
parent 1e2374d73b
commit 789b00119a
6 changed files with 122 additions and 5 deletions

View File

@ -152,6 +152,10 @@ public:
std::wstring loadWStr( ULONG64 offset ); std::wstring loadWStr( ULONG64 offset );
std::string loadAnsiStr( ULONG64 address );
std::wstring loadUnicodeStr( ULONG64 address );
ULONG ptrSize(); ULONG ptrSize();
ULONG64 ptrByte( ULONG64 offset ); ULONG64 ptrByte( ULONG64 offset );

View File

@ -207,6 +207,10 @@ BOOST_PYTHON_MODULE( pykd )
"Load string from the target buffer containing 0-terminated ansi-string" ) "Load string from the target buffer containing 0-terminated ansi-string" )
.def( "loadWStr", &DebugClient::loadWStr, .def( "loadWStr", &DebugClient::loadWStr,
"Load string from the target buffer containing 0-terminated unicode-string" ) "Load string from the target buffer containing 0-terminated unicode-string" )
.def( "loadUnicodeString", &DebugClient::loadUnicodeStr,
"Return string represention of windows UNICODE_STRING type" )
.def( "loadAnsiString", &DebugClient::loadAnsiStr,
"Return string represention of windows ANSU_STRING type" )
.def( "ptrByte", &DebugClient::ptrByte, .def( "ptrByte", &DebugClient::ptrByte,
"Read an unsigned 1-byte integer from the target memory" ) "Read an unsigned 1-byte integer from the target memory" )
.def( "ptrWord", &DebugClient::ptrWord, .def( "ptrWord", &DebugClient::ptrWord,
@ -342,6 +346,10 @@ BOOST_PYTHON_MODULE( pykd )
"Load string from the target buffer containing 0-terminated ansi-string" ); "Load string from the target buffer containing 0-terminated ansi-string" );
python::def( "loadWStr", &loadWStr, python::def( "loadWStr", &loadWStr,
"Load string from the target buffer containing 0-terminated unicode-string" ); "Load string from the target buffer containing 0-terminated unicode-string" );
python::def( "loadUnicodeString", &loadUnicodeStr,
"Return string represention of windows UNICODE_STRING type" );
python::def( "loadAnsiString", &loadAnsiStr,
"Return string represention of windows ANSU_STRING type" );
python::def( "ptrByte", &ptrByte, python::def( "ptrByte", &ptrByte,
"Read an unsigned 1-byte integer from the target memory" ); "Read an unsigned 1-byte integer from the target memory" );
python::def( "ptrWord", &ptrWord, python::def( "ptrWord", &ptrWord,

View File

@ -526,5 +526,102 @@ bool compareMemory( ULONG64 addr1, ULONG64 addr2, ULONG length, bool phyAddr )
///////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////
std::wstring DebugClient::loadUnicodeStr( ULONG64 address )
{
USHORT length;
USHORT maximumLength;
ULONG64 buffer = 0;
readMemory( m_dataSpaces, address, &length, sizeof( length ) );
if ( length == 0 )
return L"";
address += sizeof( length );
readMemory( m_dataSpaces, address, &maximumLength, sizeof( maximumLength ) );
address += sizeof( maximumLength );
if ( is64bitSystem() )
{
address += address % 8 ? ( 8 - address % 8 ) : 0 ; // âûðàâíèâàíèå íà 8 áàéò
buffer = ptrPtr( address );
address += 8;
}
else
{
address += address % 4 ? ( 4 - address % 4 ) : 0 ; // âûðàâíèâàíèå íà 8 áàéò
buffer = addr64( ptrPtr( address ) );
address += 4;
}
std::vector<wchar_t> str(length / 2);
readMemory( m_dataSpaces, buffer, &str[0], length );
return std::wstring (&str[0], length/2);
}
std::wstring loadUnicodeStr( ULONG64 address )
{
return g_dbgClient->loadUnicodeStr( address );
}
/////////////////////////////////////////////////////////////////////////////////////
std::string DebugClient::loadAnsiStr( ULONG64 address )
{
USHORT length;
USHORT maximumLength;
ULONG64 buffer = 0;
readMemory( m_dataSpaces, address, &length, sizeof( length ) );
if ( length == 0 )
return "";
address += sizeof( length );
readMemory( m_dataSpaces, address, &maximumLength, sizeof( maximumLength ) );
address += sizeof( maximumLength );
if ( is64bitSystem() )
{
address += address % 8 ? ( 8 - address % 8 ) : 0 ; // âûðàâíèâàíèå íà 8 áàéò
buffer = ptrPtr( address );
address += 8;
}
else
{
address += address % 4 ? ( 4 - address % 4 ) : 0 ; // âûðàâíèâàíèå íà 8 áàéò
buffer = addr64( ptrPtr( address ) );
address += 4;
}
std::vector<char> str(length);
readMemory( m_dataSpaces, buffer, &str[0], length );
return std::string (&str[0], length);
}
std::string loadAnsiStr( ULONG64 address )
{
return g_dbgClient->loadAnsiStr( address );
}
/////////////////////////////////////////////////////////////////////////////////////
}; // end of pykd }; // end of pykd

View File

@ -82,6 +82,10 @@ ULONG64 ptrPtr( ULONG64 offset, IDebugDataSpaces4* dbgDataSpace );
bool bool
compareMemory( ULONG64 addr1, ULONG64 addr2, ULONG length, bool phyAddr = FALSE ); compareMemory( ULONG64 addr1, ULONG64 addr2, ULONG length, bool phyAddr = FALSE );
std::wstring loadUnicodeStr( ULONG64 address );
std::string loadAnsiStr( ULONG64 address );
/////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////
}; };

View File

@ -53,8 +53,8 @@ END
// //
VS_VERSION_INFO VERSIONINFO VS_VERSION_INFO VERSIONINFO
FILEVERSION 0,1,0,0 FILEVERSION 0,1,0,1
PRODUCTVERSION 0,1,0,0 PRODUCTVERSION 0,1,0,1
FILEFLAGSMASK 0x17L FILEFLAGSMASK 0x17L
#ifdef _DEBUG #ifdef _DEBUG
FILEFLAGS 0x1L FILEFLAGS 0x1L
@ -70,11 +70,11 @@ BEGIN
BLOCK "041904b0" BLOCK "041904b0"
BEGIN BEGIN
VALUE "FileDescription", "pykd - python extension for windbg" VALUE "FileDescription", "pykd - python extension for windbg"
VALUE "FileVersion", "0, 1, 0, 0" VALUE "FileVersion", "0, 1, 0, 1"
VALUE "InternalName", "pykd" VALUE "InternalName", "pykd"
VALUE "OriginalFilename", "pykd.dll" VALUE "OriginalFilename", "pykd.dll"
VALUE "ProductName", "pykd - python extension for windbg" VALUE "ProductName", "pykd - python extension for windbg"
VALUE "ProductVersion", "0, 1, 0, 0" VALUE "ProductVersion", "0, 1, 0, 1"
END END
END END
BLOCK "VarFileInfo" BLOCK "VarFileInfo"

View File

@ -149,7 +149,6 @@ listStruct1 g_listItem13 = { 300 };
_EX_ListHead->Blink = (Entry);\ _EX_ListHead->Blink = (Entry);\
} }
void FuncWithName0() void FuncWithName0()
{ {
classChild _classChild; classChild _classChild;
@ -180,6 +179,11 @@ void FuncWithName0()
std::cout << strArray[0]; std::cout << strArray[0];
std::cout << (*ptrIntMatrix)[0][1]; std::cout << (*ptrIntMatrix)[0][1];
std::cout << g_struct3.m_noArrayField; std::cout << g_struct3.m_noArrayField;
std::cout << g_structWithBits.m_bit5;
std::cout << ptrStrArray;
std::cout << g_structTest1.m_field2;
std::cout << ptrIntMatrix1;
std::cout << g_bigValue;
} }
void FuncWithName1(int a) void FuncWithName1(int a)