mirror of
https://github.com/ivellioscolin/pykd.git
synced 2025-04-29 20:03:33 +08:00
[0.1.x] fixed : typedVar __str__ converter
git-svn-id: https://pykd.svn.codeplex.com/svn@74849 9b283d60-5439-405e-af05-b73fd8c4d996
This commit is contained in:
parent
70d40017ac
commit
1a87bf5e64
@ -102,11 +102,12 @@ BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS( DebugClient_loadSignDWords, DebugClient:
|
|||||||
BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS( DebugClient_loadSignQWords, DebugClient::loadSignQWords, 2, 3 );
|
BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS( DebugClient_loadSignQWords, DebugClient::loadSignQWords, 2, 3 );
|
||||||
BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS( DebugClient_compareMemory, DebugClient::compareMemory, 3, 4 );
|
BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS( DebugClient_compareMemory, DebugClient::compareMemory, 3, 4 );
|
||||||
BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS( DebugClient_getLocals, DebugClient::getLocals, 0, 1 );
|
BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS( DebugClient_getLocals, DebugClient::getLocals, 0, 1 );
|
||||||
BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS( pyDia_Symbol_findChildrenEx, pyDia::Symbol::findChildrenEx, 1, 3 );
|
|
||||||
BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS( DebugClient_setSoftwareBp, DebugClient::setSoftwareBp, 1, 2 );
|
BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS( DebugClient_setSoftwareBp, DebugClient::setSoftwareBp, 1, 2 );
|
||||||
BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS( DebugClient_setHardwareBp, DebugClient::setHardwareBp, 3, 4 );
|
BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS( DebugClient_setHardwareBp, DebugClient::setHardwareBp, 3, 4 );
|
||||||
BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS( StackFrame_getLocals, StackFrame::getLocals, 0, 1 );
|
BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS( StackFrame_getLocals, StackFrame::getLocals, 0, 1 );
|
||||||
|
|
||||||
|
BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS( pyDia_Symbol_findChildrenEx, pyDia::Symbol::findChildrenEx, 1, 3 );
|
||||||
|
|
||||||
#define DEF_PY_CONST_ULONG(x) \
|
#define DEF_PY_CONST_ULONG(x) \
|
||||||
python::scope().attr(#x) = ULONG(##x)
|
python::scope().attr(#x) = ULONG(##x)
|
||||||
|
|
||||||
@ -723,8 +724,8 @@ BOOST_PYTHON_MODULE( pykd )
|
|||||||
"Retrieves the type of the target CPU: IMAGE_FILE_MACHINE_XXX")
|
"Retrieves the type of the target CPU: IMAGE_FILE_MACHINE_XXX")
|
||||||
.def( "__str__", &pyDia::Symbol::print)
|
.def( "__str__", &pyDia::Symbol::print)
|
||||||
.def("__getitem__", &pyDia::Symbol::getChildByName)
|
.def("__getitem__", &pyDia::Symbol::getChildByName)
|
||||||
.def("__len__", &pyDia::Symbol::getChildCount )
|
.def("__len__", (ULONG (pyDia::Symbol::*)())&pyDia::Symbol::getChildCount )
|
||||||
.def("__getitem__", &pyDia::Symbol::getChildByIndex)
|
.def("__getitem__", (pyDia::SymbolPtr(pyDia::Symbol::*)(ULONG) )&pyDia::Symbol::getChildByIndex)
|
||||||
.def("__eq__", &pyDia::Symbol::eq)
|
.def("__eq__", &pyDia::Symbol::eq)
|
||||||
.def("__hash__", &pyDia::Symbol::getIndexId);
|
.def("__hash__", &pyDia::Symbol::getIndexId);
|
||||||
|
|
||||||
|
@ -316,12 +316,12 @@ SymbolPtr Symbol::getChildByName(const std::string &_name)
|
|||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
ULONG Symbol::getChildCount()
|
ULONG Symbol::getChildCount( ULONG symTag )
|
||||||
{
|
{
|
||||||
DiaEnumSymbolsPtr symbols;
|
DiaEnumSymbolsPtr symbols;
|
||||||
HRESULT hres =
|
HRESULT hres =
|
||||||
m_symbol->findChildren(
|
m_symbol->findChildren(
|
||||||
SymTagNull,
|
static_cast<enum SymTagEnum>(symTag),
|
||||||
NULL,
|
NULL,
|
||||||
nsCaseSensitive,
|
nsCaseSensitive,
|
||||||
&symbols);
|
&symbols);
|
||||||
@ -338,12 +338,12 @@ ULONG Symbol::getChildCount()
|
|||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
SymbolPtr Symbol::getChildByIndex(ULONG _index)
|
SymbolPtr Symbol::getChildByIndex(ULONG _index, ULONG symTag )
|
||||||
{
|
{
|
||||||
DiaEnumSymbolsPtr symbols;
|
DiaEnumSymbolsPtr symbols;
|
||||||
HRESULT hres =
|
HRESULT hres =
|
||||||
m_symbol->findChildren(
|
m_symbol->findChildren(
|
||||||
SymTagNull,
|
static_cast<enum SymTagEnum>(symTag),
|
||||||
NULL,
|
NULL,
|
||||||
nsCaseSensitive,
|
nsCaseSensitive,
|
||||||
&symbols);
|
&symbols);
|
||||||
|
@ -133,8 +133,10 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
SymbolPtr getChildByName(const std::string &_name);
|
SymbolPtr getChildByName(const std::string &_name);
|
||||||
ULONG getChildCount();
|
|
||||||
SymbolPtr getChildByIndex(ULONG _index);
|
ULONG getChildCount( ULONG symTag = SymTagNull );
|
||||||
|
|
||||||
|
SymbolPtr getChildByIndex(ULONG _index, ULONG symTag = SymTagNull );
|
||||||
|
|
||||||
bool isConstant();
|
bool isConstant();
|
||||||
|
|
||||||
|
@ -15,6 +15,7 @@ TypeInfoPtr TypeInfo::getTypeInfo( pyDia::SymbolPtr &typeSym )
|
|||||||
return getBaseTypeInfo( typeSym );
|
return getBaseTypeInfo( typeSym );
|
||||||
|
|
||||||
case SymTagUDT:
|
case SymTagUDT:
|
||||||
|
case SymTagBaseClass:
|
||||||
return TypeInfoPtr( new UdtTypeInfo( typeSym ) );
|
return TypeInfoPtr( new UdtTypeInfo( typeSym ) );
|
||||||
|
|
||||||
case SymTagArrayType:
|
case SymTagArrayType:
|
||||||
@ -479,10 +480,10 @@ TypeInfoPtr UdtTypeInfo::getFieldByIndex( ULONG index )
|
|||||||
|
|
||||||
std::string UdtTypeInfo::getFieldNameByIndex( ULONG index )
|
std::string UdtTypeInfo::getFieldNameByIndex( ULONG index )
|
||||||
{
|
{
|
||||||
if ( index >= m_dia->getChildCount() )
|
if ( index >= m_dia->getChildCount( SymTagData ) )
|
||||||
throw TypeException( m_dia->getName(), ": field not found" );
|
throw TypeException( m_dia->getName(), ": field not found" );
|
||||||
|
|
||||||
pyDia::SymbolPtr field = m_dia->getChildByIndex(index);
|
pyDia::SymbolPtr field = m_dia->getChildByIndex(index, SymTagData);
|
||||||
|
|
||||||
if ( !field )
|
if ( !field )
|
||||||
throw TypeException( m_dia->getName(), ": field not found" );
|
throw TypeException( m_dia->getName(), ": field not found" );
|
||||||
@ -494,7 +495,7 @@ std::string UdtTypeInfo::getFieldNameByIndex( ULONG index )
|
|||||||
|
|
||||||
ULONG UdtTypeInfo::getFieldCount()
|
ULONG UdtTypeInfo::getFieldCount()
|
||||||
{
|
{
|
||||||
return m_dia->getChildCount();
|
return m_dia->getChildCount( SymTagData );
|
||||||
}
|
}
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -189,3 +189,25 @@ class TypedVarTest( unittest.TestCase ):
|
|||||||
tv2 = target.module.typedVar( "structTest", tv1 )
|
tv2 = target.module.typedVar( "structTest", tv1 )
|
||||||
self.assertEqual( tv1, tv2 )
|
self.assertEqual( tv1, tv2 )
|
||||||
self.assertTrue( tv1 )
|
self.assertTrue( tv1 )
|
||||||
|
|
||||||
|
|
||||||
|
def testPrint(self):
|
||||||
|
self.assertTrue( str(target.module.typedVar( "g_ucharValue" ) ) )
|
||||||
|
self.assertTrue( str(target.module.typedVar( "g_ushortValue" ) ) )
|
||||||
|
self.assertTrue( str(target.module.typedVar( "g_ulongValue" ) ) )
|
||||||
|
self.assertTrue( str(target.module.typedVar( "g_ulonglongValue" ) ) )
|
||||||
|
self.assertTrue( str(target.module.typedVar( "g_structWithBits" ) ) )
|
||||||
|
self.assertTrue( str(target.module.typedVar( "g_structTest" ) ) )
|
||||||
|
self.assertTrue( str(target.module.typedVar( "g_structTest1" ) ) )
|
||||||
|
self.assertTrue( str(target.module.typedVar( "g_testArray" ) ) )
|
||||||
|
self.assertTrue( str(target.module.typedVar( "g_structTestPtr" ) ) )
|
||||||
|
self.assertTrue( str(target.module.typedVar( "g_structTestPtrPtr" ) ) )
|
||||||
|
self.assertTrue( str(target.module.typedVar( "longlongArray" ) ) )
|
||||||
|
self.assertTrue( str(target.module.typedVar( "intMatrix4" ) ) )
|
||||||
|
self.assertTrue( str(target.module.typedVar( "ptrIntMatrix" ) ) )
|
||||||
|
self.assertTrue( str(target.module.typedVar( "g_classChild" ) ) )
|
||||||
|
self.assertTrue( str(target.module.typedVar( "g_struct3" ) ) )
|
||||||
|
self.assertTrue( str(target.module.typedVar( "g_listHead" ) ) )
|
||||||
|
self.assertTrue( str(target.module.typedVar( "g_voidPtr" ) ) )
|
||||||
|
self.assertTrue( str(target.module.typedVar( "g_arrOfPtrToFunc" ) ) )
|
||||||
|
self.assertTrue( str(target.module.typedVar( "g_unTypedPtrToFunction" ) ) )
|
||||||
|
@ -237,7 +237,7 @@ StructWithNested g_structWithNested;
|
|||||||
StructWithNested::Nested g_structNested;
|
StructWithNested::Nested g_structNested;
|
||||||
|
|
||||||
WNDENUMPROC g_ptrToFunction;
|
WNDENUMPROC g_ptrToFunction;
|
||||||
void *g_unTypedPtrToFunction;
|
void *g_unTypedPtrToFunction = g_ptrToFunction;
|
||||||
#pragma pack( pop )
|
#pragma pack( pop )
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
Loading…
Reference in New Issue
Block a user